包和 jar 文件的创建
前言
在之前的文章中,講到了面向的 3 大特性(封裝、繼承、多態)和面向對象設計的 5 大原則(SRP、OCP、LSP、DIP、ISP)。此外,我們還講了如何創建一個類,并且在創建類后如何構造一個對象。然后還介紹了類中的屬性和方法,并對構造方法和引用也做了簡單的講解。
有了上面的基礎之后,今天我們來繼續學習面向對象的相關知識,主要內容預告如下:
- 包
- 注釋
- jar 文件的創建
包
假設現在有這么一種情況,諸葛亮、周瑜、曹操共同開發一款程序。其中,周瑜和曹操均在自己代碼模塊中寫了一個 PublicUtil 類,現在諸葛亮要調用周瑜和曹操模塊中代碼,需要同時用到他們中的 PublicUtil 類,這時候就犯難了,諸葛亮在他的代碼中使用 PublicUtil 類時,該怎么區分是調用周瑜的,還是調用的曹操的呢?
針對這個問題,開發 Java 的前輩們當然也想到了。于是,他們在 Java 中定義了一種名字空間,也就是我們今天要講的包:package。通過使用包機制,就十分容易區別類名的命名空間了。
假設曹操的 PublicUtil 類代碼如下:
// 申明包名 package caocao; public class PublicUtil{…… }周瑜的 PublicUtil 類代碼如下:
// 申明包名 package zhouyu; public class PublicUtil{…… }此時,如果諸葛亮要同時使用他們倆代碼中的 PublicUtil 類,此時就可以通過引入他們倆的包,然后通過使用 包名.類名 的引用方式來進行區分即可。
package zhugeliang; import caocao; import zhouyu; public class Util{// 使用周瑜代碼zhouyu.PublicUtil.xxx();……// 使用曹操代碼caocao.PublicUtil.xxx();…… }以上代碼中的 import 你可能也在其他代碼中見到過,但你不知道啥作用。其實它就是為了包的使用而生,如果我要使用另一個人的包,那該怎么做呢?其實很簡單,只需要在程序中使用關鍵字 import 即可完成包的導入。
通過使用包,可以達到以下的作用:
注釋
所謂注釋,就是寫在程序里邊對代碼進行結束說明的文字,既方便自己也方便他人查看,更快理解程序含義。而且注釋是不影響程序的執行的,在我們對 Java 源代碼進行編譯后,字節碼文件中不含源代碼中的注釋內容。
在 Java 中,通常支持三種注釋方式,它們分別是:
- //:單行注釋
- /* */:多行注釋
- /** */:文檔注釋
單行注釋
單行注釋是以雙斜杠 // 來標識,表示只注釋當前行內容,一般用在需要注釋的內容較少的地方,以下就是一個單行注釋的實例。
// 第一個 Java 程序 public class HelloWorld{public static void main(String[] args){System.out.println("Hello World!");} }多行注釋
通常我們把要注釋的內容放在 /* 和 */ 之間,表示在兩者之間的內容都是我們的注釋內容,以下是一個多行注釋的實例。
/* * 第一個 Java 程序 * 這是許多初學者都會寫的一個程序 */ public class HelloWorld{public static void main(String[] args){System.out.println("Hello World!");} }文檔注釋
文檔注釋和多行注釋很像,它是將我們所需要注釋的內容包含在 /** 和 */ 之間。而文檔注釋和其他兩種注釋最大的區別就在于:我們可以利用 javadoc 工具來提取文檔注釋,然后生成一個 HTML 文檔,類似于 Java 官網所提供的 API 文檔,以下是一個文檔注釋的實例。
/** * 第一個 Java 程序 * 這是許多初學者都會寫的一個程序 */ public class HelloWorld{/*** 主函數* @param args 主函數參數列表*/public static void main(String[] args){System.out.println("Hello World!");} }然后我們通過終端,使用 javadoc 命令就可以為上述文件生成一個 HTML 文檔。
javadoc HelloWorld.java而文檔注釋相比于其他兩種注釋,也有更多值得注意的地方,下面就分別來看看需要留意的地方。
- 類注釋
顧名思義,所謂類注釋,就是針對整個類的說明,它必須放在 import 之后,但又必須放在類定義之前。以下是一個類注釋的實例:
/** * Animal,動物類 */ public class Animal{... }這里需要注意的是,在 /** 和 */ 之間的其他行注釋,* 是可有可無的,之所以加上,更大情況出于美觀的考慮,上面的實例寫成如下樣式也是合法的。
/**Animal,動物類 */ public class Animal{... }- 方法注釋
同樣的,方法注釋也就是針對類中方法的注釋,它必須放在所描述的方法之前。而一般情況下,除開說明該方法的功能之外,我們經常使用如下標記來對方法進行注釋。
| @param variable description | 用于介紹當前方法的參數,可以占據多行 |
| @return description | 用于描述當前方法的返回值,可以跨多行 |
| @throws class description | 用于表示該方法有可能拋出的異常 |
以下就是一個方法注釋的實例:
/** * 求兩數之h * @param num1 加數1 * @param num2 加數2 @ return 兩數之和 */ public int add(int num1, int num2){return num1 + num2; }- 字段注釋
字段注釋顧名思義,也就是對于類中字段的說明,用于描述字段的含義,以下是一個字段注釋的例子。
public class Cunyu{/*** 公眾號*/public String wePublic; }當然,如果你不喜歡把一個字段的注釋分成多行的話,也可以寫成以下格式。
public class Cunyu{/**公眾號*/public String wePublic; }兩種方式都是可以的,也沒有優劣之分,可以根據自己的風格來選擇。但是在 IntelliJ IDEA 等 IDE 中,如果對代碼進行格式化,IDEA 會將第二種方式格式化成第一種方式,這一點需要注意。
假設有以下一段代碼,我們需要生成關于代碼的文檔說明。那么就可以使用 JDK 中所提供的 javadoc 命令來提取代碼的文檔注釋。
/** * 第一個 Java 程序 * 這是初學者基本都會寫的一個程序 * @author 村雨遙 * @version 1.0 */ public class HelloWorld {/*** 主函數:程序入口* @param args 主函數參數列表*/public static void main(String[] args){System.out.println("Hello World!");} }然后利用以下命令就可以生成我們的文檔注釋。
javadoc -d helloworld -author -version -encoding UTF-8 HelloWorld.java以上命令的意思就是,對名為 HelloWorld.java 的提取其中的文檔注釋,并將輸出的文件放在 helloworld 文件夾下,并且在文檔中包含程序作者和版本,編碼方式為 UTF-8。
生成的文件列表詳情見下圖,打開其中的 index.html 就可以查看提取的文檔注釋。
jar 文件的創建
其實關于這個,我在之前的文章也寫過。不過我是利用 IntelliJ IDEA 來對進行代碼的打包,如果感興趣,可以點擊下方傳送門去看看。
如何利用 IntelliJ IDEA 創建 Java 入門應用
不過那是借助工具來生成的,今天我們來看看如何利用 JDK 所提供的命令行工具,來創建一個能打印出 Hello World! 的 jar 包。
同樣的,我們仍然是需要先準備一個能輸出 Hello World! 的 Java 源代碼,命名為 HelloWorld.java。
public class HelloWorld {public static void main(String[] args){System.out.println("Hello World!");} }接著,利用 javac 命令對該文件進行編譯,然后會生成 HelloWorld.class 字節碼文件。
javac HelloWorld.java然后,利用 jar 命令來對生成的字節碼文件進行打包。
jar -cvf hello.jar HelloWorld.class其中 c 表示創建一個新 jar 包,v 表示創建過程中打印創建過程中的信息,f 則表示對新生成的 jar 命名。
最后,利用以下命令來運行 jar 包。
java -jar hello.jar不過并不會順利出現我們想要的結果,此時會報錯 hello.jar 中沒有主清單屬性。這是因為我們還沒有在 MENIFEST.MF 文件中添加 Main-Class 屬性。
用壓縮軟件打開剛創建的 hello.jar,里邊除了 HelloWorld.class 文件之外,還會多一個 META-INF 文件夾,里邊還有一個 MENIFEST.MF 文件,此時我們只需要用編輯器打開該文件,然后在文件中加入以下代碼。(記得添加之后要保證整個文件最后保留一行空行)
Main-Class: HelloWorld添加完成之后,再次運行 java -jar hello.jar ,就可以成功在控制臺打印 Hello World! 了。
總結
以上就是今天博客的所有內容了,如果您覺得本文不錯,那就來個一鍵三連吧,您的關注就是我堅持的不懈動力!
總結
以上是生活随笔為你收集整理的包和 jar 文件的创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【系统架构】原型图的认识
- 下一篇: 最接地气的一套PHP面试题(总结不易,踩