背景
之前學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包
這里要啰嗦一遍概念,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包的其他點,我目前沒有過多接觸,也便沒有仔細看下去,感興趣的自行查看
暫時結束
本貼是概念為主,行文至此便暫時結束,后續有識訓會考慮補充或者分類重新開貼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458446.html
標籤:其他
上一篇:HashMap原始碼個人理解
下一篇:Makefile學習筆記
