日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

包和 jar 文件的创建

發布時間:2023/12/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 包和 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 文件的创建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。