背景 之前學Java屬於趕鴨子上架,草草學習基礎語法便直接做課程作業,許多概念問題仍不清楚,故在此梳理一下,主要參考廖雪峰和互聯網資料。 Java運行方式與JVM Java是介於編譯型語言(C++)和解釋型語言(Python)之間的。所有Java代碼先被編譯為.class文件,然後在Java虛擬機( ...
背景
之前學Java屬於趕鴨子上架,草草學習基礎語法便直接做課程作業,許多概念問題仍不清楚,故在此梳理一下,主要參考廖雪峰和互聯網資料。
Java運行方式與JVM
Java是介於編譯型語言(C++)和解釋型語言(Python)之間的。所有Java代碼先被編譯為.class文件,然後在Java虛擬機(JVM)中運行,跨系統(一次開發,隨時可用)。
JDK,JRE,JVM的聯繫和區別
-
JDK(Java Development Kit):開發工具包
- 包含JRE+編譯器、調試器等開發工具
-
JRE(Java Runtime Environment):Java運行時環境
- 包含JVM+核心類庫
-
JVM(Java Virtual Machine):Java虛擬機
- Java跨平臺最核心的部分
幾個可執行文件的意義
- java:即JVM,運行Java程式,就是啟動JVM,然後讓JVM執行指定的編譯後的代碼;
- javac:Java的編譯器,把Java源碼文件(
.java
)編譯為Java位元組碼文件(.class
); - jar:把一組
.class
文件打包成一個.jar
文件,便於發佈; - javadoc:從Java源碼中自動提取註釋並生成文檔;
- jdb:Java調試器,用於開發階段的運行調試。
jar包相關概念
什麼是jar包
這裡要啰嗦一遍概念,jar包就是 Java Archive File,顧名思義,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式,是一種與平臺無關的文件格式,可將多個文件合成一個文件。jar 包與 zip 包非常相似——準確地說,它就是 zip 包,所以叫它文件包。jar 與 zip 唯一的區別就是在 jar 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,該文件是在生成 jar 文件的時候自動創建的,作為jar裡面的"詳情單",包含了該Jar包的版本、創建人和類搜索路徑Class-Path等信息,當然如果是可執行Jar包,會包含Main-Class屬性,表明Main方法入口,尤其是較為重要的Class-Path和Main-Class,咱們一會在後續的內容裡面會進行詳細地講解。
此外,值得註意的是,因為jar包主要是對class文件進行打包,而java編譯生成的class文件是平臺無關的,這就意味著jar包是跨平臺的,所以不必關心涉及具體平臺的問題。
為什麼要打jar包
在大致瞭解了什麼是jar包了之後,咱們來講講為什麼要打jar包。主要從我們自身的徐需求出發,不難發現,當我們開發了一個程式以後,程式中有很多的類,如果需要提供給別人使用,發給對方一大堆源文件是非常不好的,因此通常需要把這些類以及相關的資源文件打包成一個 jar 包,把這個 jar 包提供給別人使用,同時提供給使用者清晰的文檔。這樣他人在拿到我們提供的jar之後,就能方便地進行調用,具體如何調用後面會進行講解。
因此,建議大家在平時寫代碼搬磚的時候,註意把自己代碼的通用部分抽離出來,主鍵積累一些通用的util類,將其逐漸模塊化,最後打成jar包供自己在別的項目或者模塊中使用,同時不斷打磨jar裡面的內容,將其做得越來越容易理解和通用,這樣的好處是除了會對你的代碼重構能力以及模塊抽象能力有很好的幫助之外,更是一種從長期解放你的重覆工作量,讓你有更多的精力去做其他事情的方式,甚至當你抽象出業內足夠通用的jar之後,jar包還能為你帶來意想不到的利潤(當然公司里該保密的東西還是得保密的)。這也是java發展得如此之好的原因,無論出於盈利或者非盈利的目的,將自己的通用工具或者框架抽取出來,打成jar包供他人調用,使得整個java生態圈變得越來越強大–幾乎很多業務場景都能找到對應的jar包。
原文提到了一些關於jar包的其他點,我目前沒有過多接觸,也便沒有仔細看下去,感興趣的自行查看
暫時結束
本貼是概念為主,行文至此便暫時結束,後續有收穫會考慮補充或者分類重新開貼。