一篇文章帶你入門Java基本概念
Java基本概念
JDK包含瞭不少Java開發相關命令。如,javac、java、javap、javaw、javadoc。雖然現在的Java開發都使用IDE完成,基本上不會直接使用這些命令。但是理解這些命令的用法,可以讓我們更加紮實的掌握java編譯、運行等的基本概念。
在講解Java命令之前,我們先瞭解一些基本概念,可以幫助我們更加深刻的所要講解的Java命令。
一、JRE(Java運行時環境)
Java Runtime Environment。故名思意,包含瞭運行Java程序所需的環境,比如Java虛擬機、相關的類庫等相關資源。**你可以將JRE理解成一個運行在操作系統上的程序,該程序可以用來運行Java程序。**這個程序隻用來運行運行Java程序,但並不包含Java開發的工具。因此,對於開發人員,隻有JRE是不夠。對於需要運行的Java程序的普通用戶,隻需要正確版本的JRE就可以運行Java程序瞭。
註意:每個操作系統上的JRE程序都是不一樣的,比如Windows與Linux上的JRE就不一樣。你可以將不一樣,理解成他們的代碼不同。因此你在下載時,會發現不同操作操作系統會有不同的JRE,即使是同一個操作系統,32位與64位的JRE也不一樣。
二、JDK(Java開發工具)
Java Development Kit。包含瞭Java開發的工具,比如javac、javap命令、java源代碼等。對於開發人員,需要下載這個才能開發Java程序。
JDK 8及之前,安裝JDK的時候除瞭安裝JDK還會安裝一個獨立的JRE,因此你在安裝的時候,會發現要安裝兩個東西。這個JRE,可以運行兼容版本的Java程序。換句話說,對於所有Java程序,某個JRE是完全一樣的,不能單獨定制。註意:安裝JDK 8實際上安裝瞭兩個JRE。一個安裝在JDK目錄的jre目錄中,另一個安裝在你指定的其他目錄。
JDK 11及之後,不包含另一個獨立的JRE。JDK本身已經包含瞭Java的運行時環境,不過這個運行時環境剝離瞭一些東西,比如默認不包含的Java Swing。Java 11使用瞭jigsaw模塊化系統,你可以為java程序創建一個更小的適合該程序的JRE。比如,你的Java程序不包含Java Swing代碼,你可以使用jlink為你的程序定制一個更小的專屬於你的程序的JRE。
結論:
1.JDK 11後,你不需要安裝獨立的JRE,因為其已經包含瞭。
2.JDK 11引入瞭模塊化系統,你可以為自己的程序定制JRE。
三、Java源代碼文件(.class)
.java文件(後綴名為java,如Hello.java),包含Java源代碼。本質上是一個文本文件,可通過文本編輯器編輯,不能直接運行。
四、Java字節碼文件(.java)
.class文件(如Hello.class),.java文件經過javac命令編譯得到.class文件。是一個二進制文件,包含瞭Java虛擬機才看得懂的字節碼命令。
五、Java虛擬機(JVM)
Java Virtual Machine,簡稱JVM。通常來說JRE都要包含JVM。JVM是字節碼文件運行的環境,可以加載與運行Java類。你的.class實際上是跑在JVM上,而JVM則是一個獨立的程序,運行在操作系統上。每個操作系統上JVM的程序都不一樣。但他們有一個共同之處,就是都可以運行你的.class文件。
六、跨平臺運行
什麼是跨平臺運行呢?
就是你編寫好的.java源代碼編譯為.class字節碼文件後,那麼任何兼容該.class文件的JRE中的JVM都可以運行該字節碼文件。而無需考慮這個JRE到底是Linux下的,還是Windows下。簡單地說,你在Windows下編譯好的.class文件,拿到Linux下,隻要JRE版本正確,就可以運行。註意:這裡的兼容指的是,Java版本的向下兼容。比如,你在Java 8下編譯的字節碼文件,理論上來說Java 11是可以直接運行的。反之則不行。
相比較於C或C++語言,你在Windows下使用gcc工具編譯、鏈接成可執行程序.exe。這個可執行程序,在Linux下是無法執行的。
為什麼可以跨平臺呢?
關鍵在於JVM。.class字節碼文件是結構中立的。所謂的結構中立指的是.class文件包含的面向JVM的字節碼命令,而不是面對某個操作系統的機器碼。你在哪個操作系統上對某個.java文件進行編譯生成的.class文件都是一樣的(隻要Java版本相同)。因此,不管你是Linux上的JVM還是Windows上的JVM,都可以運行這些.class文件中字節碼指令。見下圖。
註意:字節碼不是機器碼,因此不能直接在操作系統上直接運行。隻能先運行JVM,才能運行字節碼文件。這也就是早期Java程序慢的一個原因。
七、JDK與JRE、JVM的關系?
JDK包含瞭JRE與Java開發工具(如javac,java,jar, jlink等命令)。
JRE包含瞭JVM、Java類庫與一些資源文件。
八、幾個結論
1.Java程序的開發運行流程
編寫.java文件—經過javac編譯—>.class文件—使用java命令載入—>載入到JVM運行。
如下圖所示。
2.運行JAVA程序必須先運行JRE中的JVM。
3.Java程序是跨平臺的。編譯好的.class文件可以在不同操作系統上兼容的Java上運行。
4.Java 11及以後支持模塊化系統jigsaw。因此可為自己的Java程序定制化JRE。不過初學者,暫時不用考慮這些,直接使用默認的JRE即可。但碰到問題時(如要編寫Java Swing程序,卻提示錯誤),要瞭解問題可能產生的原因。
總結
本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!