初學Java時沒有理解的一些概念

睿嶼青衫發表於2022-04-17

背景

之前學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包的其他點,我目前沒有過多接觸,也便沒有仔細看下去,感興趣的自行檢視

暫時結束

本貼是概念為主,行文至此便暫時結束,後續有收穫會考慮補充或者分類重新開貼。

相關文章