一篇文章帶你入門Java基本概念
Java基本概念
JDK包含了不少Java開發(fā)相關(guān)命令。如,javac、java、javap、javaw、javadoc。雖然現(xiàn)在的Java開發(fā)都使用IDE完成,基本上不會直接使用這些命令。但是理解這些命令的用法,可以讓我們更加扎實的掌握java編譯、運行等的基本概念。
在講解Java命令之前,我們先了解一些基本概念,可以幫助我們更加深刻的所要講解的Java命令。
一、JRE(Java運行時環(huán)境)
Java Runtime Environment。故名思意,包含了運行Java程序所需的環(huán)境,比如Java虛擬機、相關(guān)的類庫等相關(guān)資源。**你可以將JRE理解成一個運行在操作系統(tǒng)上的程序,該程序可以用來運行Java程序。**這個程序只用來運行運行Java程序,但并不包含Java開發(fā)的工具。因此,對于開發(fā)人員,只有JRE是不夠。對于需要運行的Java程序的普通用戶,只需要正確版本的JRE就可以運行Java程序了。
注意:每個操作系統(tǒng)上的JRE程序都是不一樣的,比如Windows與Linux上的JRE就不一樣。你可以將不一樣,理解成他們的代碼不同。因此你在下載時,會發(fā)現(xiàn)不同操作操作系統(tǒng)會有不同的JRE,即使是同一個操作系統(tǒng),32位與64位的JRE也不一樣。
二、JDK(Java開發(fā)工具)
Java Development Kit。包含了Java開發(fā)的工具,比如javac、javap命令、java源代碼等。對于開發(fā)人員,需要下載這個才能開發(fā)Java程序。
JDK 8及之前,安裝JDK的時候除了安裝JDK還會安裝一個獨立的JRE,因此你在安裝的時候,會發(fā)現(xiàn)要安裝兩個東西。這個JRE,可以運行兼容版本的Java程序。換句話說,對于所有Java程序,某個JRE是完全一樣的,不能單獨定制。注意:安裝JDK 8實際上安裝了兩個JRE。一個安裝在JDK目錄的jre目錄中,另一個安裝在你指定的其他目錄。
JDK 11及之后,不包含另一個獨立的JRE。JDK本身已經(jīng)包含了Java的運行時環(huán)境,不過這個運行時環(huán)境剝離了一些東西,比如默認不包含的Java Swing。Java 11使用了jigsaw模塊化系統(tǒng),你可以為java程序創(chuàng)建一個更小的適合該程序的JRE。比如,你的Java程序不包含Java Swing代碼,你可以使用jlink為你的程序定制一個更小的專屬于你的程序的JRE。
結(jié)論:
1.JDK 11后,你不需要安裝獨立的JRE,因為其已經(jīng)包含了。
2.JDK 11引入了模塊化系統(tǒng),你可以為自己的程序定制JRE。
三、Java源代碼文件(.class)
.java文件(后綴名為java,如Hello.java),包含Java源代碼。本質(zhì)上是一個文本文件,可通過文本編輯器編輯,不能直接運行。
四、Java字節(jié)碼文件(.java)
.class文件(如Hello.class),.java文件經(jīng)過javac命令編譯得到.class文件。是一個二進制文件,包含了Java虛擬機才看得懂的字節(jié)碼命令。
五、Java虛擬機(JVM)
Java Virtual Machine,簡稱JVM。通常來說JRE都要包含JVM。JVM是字節(jié)碼文件運行的環(huán)境,可以加載與運行Java類。你的.class實際上是跑在JVM上,而JVM則是一個獨立的程序,運行在操作系統(tǒng)上。每個操作系統(tǒng)上JVM的程序都不一樣。但他們有一個共同之處,就是都可以運行你的.class文件。
六、跨平臺運行
什么是跨平臺運行呢?
就是你編寫好的.java源代碼編譯為.class字節(jié)碼文件后,那么任何兼容該.class文件的JRE中的JVM都可以運行該字節(jié)碼文件。而無需考慮這個JRE到底是Linux下的,還是Windows下。簡單地說,你在Windows下編譯好的.class文件,拿到Linux下,只要JRE版本正確,就可以運行。注意:這里的兼容指的是,Java版本的向下兼容。比如,你在Java 8下編譯的字節(jié)碼文件,理論上來說Java 11是可以直接運行的。反之則不行。
相比較于C或C++語言,你在Windows下使用gcc工具編譯、鏈接成可執(zhí)行程序.exe。這個可執(zhí)行程序,在Linux下是無法執(zhí)行的。
為什么可以跨平臺呢?
關(guān)鍵在于JVM。.class字節(jié)碼文件是結(jié)構(gòu)中立的。所謂的結(jié)構(gòu)中立指的是.class文件包含的面向JVM的字節(jié)碼命令,而不是面對某個操作系統(tǒng)的機器碼。你在哪個操作系統(tǒng)上對某個.java文件進行編譯生成的.class文件都是一樣的(只要Java版本相同)。因此,不管你是Linux上的JVM還是Windows上的JVM,都可以運行這些.class文件中字節(jié)碼指令。見下圖。
注意:字節(jié)碼不是機器碼,因此不能直接在操作系統(tǒng)上直接運行。只能先運行JVM,才能運行字節(jié)碼文件。這也就是早期Java程序慢的一個原因。
七、JDK與JRE、JVM的關(guān)系?
JDK包含了JRE與Java開發(fā)工具(如javac,java,jar, jlink等命令)。
JRE包含了JVM、Java類庫與一些資源文件。
八、幾個結(jié)論
1.Java程序的開發(fā)運行流程
編寫.java文件—經(jīng)過javac編譯—>.class文件—使用java命令載入—>載入到JVM運行。
如下圖所示。
2.運行JAVA程序必須先運行JRE中的JVM。
3.Java程序是跨平臺的。編譯好的.class文件可以在不同操作系統(tǒng)上兼容的Java上運行。
4.Java 11及以后支持模塊化系統(tǒng)jigsaw。因此可為自己的Java程序定制化JRE。不過初學(xué)者,暫時不用考慮這些,直接使用默認的JRE即可。但碰到問題時(如要編寫Java Swing程序,卻提示錯誤),要了解問題可能產(chǎn)生的原因。
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java語言描述Redis分布式鎖的正確實現(xiàn)方式
這篇文章主要介紹了java語言描述Redis分布式鎖的正確實現(xiàn)方式,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12Java繼承extends與super關(guān)鍵字詳解
本篇文章給大家詳細講述了Java繼承extends與super關(guān)鍵字的相關(guān)知識點,需要的朋友們可以參考學(xué)習(xí)下。2018-02-02Java中Iterator與ListIterator迭代的區(qū)別
本文主要介紹了Java中Iterator與ListIterator迭代的區(qū)別,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07Java實現(xiàn)監(jiān)聽文件變化的三種方案詳解
這篇文章主要介紹了Java實現(xiàn)監(jiān)聽文件變化的三種方法,每種方案給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05