JDK,JRE和JVM三者的关系以及java的运行机制,环境变量,三大版本,特点
JDK,JRE和JVM
1.JVM
Java Virtual Machine是Java虛擬機(jī),Java程序需要運(yùn)行在虛擬機(jī)上,不同的平臺(tái)有自己的虛擬機(jī),因此Java語(yǔ)言可以實(shí)現(xiàn)跨平臺(tái)。
所謂跨平臺(tái)性,是指java語(yǔ)言編寫的程序,一次編譯后,可以在多個(gè)系統(tǒng)平臺(tái)上運(yùn)行。
實(shí)現(xiàn)原理:Java源代碼經(jīng)過(guò)虛擬機(jī)編譯器編譯后產(chǎn)生的文件(即擴(kuò)展為.class的文件)又叫字節(jié)碼文件,字節(jié)碼不面向任何特定的處理器,只面向虛擬機(jī)。Java程序是通過(guò)java虛擬機(jī)在系統(tǒng)平臺(tái)上運(yùn)行的,只要該系統(tǒng)可以安裝相應(yīng)的java虛擬機(jī),該系統(tǒng)就可以運(yùn)行java程
下面是jdk的幾種基本組件
| javac | 編譯器把源文件轉(zhuǎn)化成字節(jié)碼文件 |
| jar | 打包工具將相關(guān)類文件打包成一個(gè).jar文件 |
| javadoc | 文檔生成器從源碼注釋要提取文檔 |
| jdb | 查錯(cuò)工具,對(duì)編譯器返回的代碼錯(cuò)誤進(jìn)行調(diào)試 |
| java | 解釋器,運(yùn)行字節(jié)碼文件 |
| appletviewer | 小程序?yàn)g覽器一種執(zhí)行HTML文件的java小程序?yàn)g覽器 |
java運(yùn)行時(shí)不用加后邊的.class擴(kuò)展名。javac編譯時(shí)可用javac+-d<指定生成文件的目錄名>+文件名來(lái)編譯文件,這樣可以把指定生成的文件放在指定目錄里。文檔注釋可以被javadoc處理建立一個(gè)外部說(shuō)明性文件,文檔注釋比較特別用/** */
2.JRE
Java Runtime Environment包括Java虛擬機(jī)和Java程序所需的核心類庫(kù)等。核心類庫(kù)主要是java.lang包:包含了運(yùn)行Java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學(xué)函數(shù)、字符串處理、線程、異常處理類等,系統(tǒng)缺省加載這個(gè)包
如果想要運(yùn)行一個(gè)開發(fā)好的Java程序,計(jì)算機(jī)中只需要安裝JRE即可。
3.JDK
Java Development Kit是提供給Java開發(fā)人員使用的,其中包含了Java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就無(wú)需再單獨(dú)安裝JRE了。其中的開發(fā)工具:編譯工具(javac.exe),打包工具(jar.exe)等
java環(huán)境變量
我們都知道在運(yùn)行我們的java程序都要先配置環(huán)境變量,但是為什么要配置?
(1)JAVA_HOME環(huán)境變量:它指向jdk的安裝目錄,Eclipse/NetBeans/Tomcat等軟件就是通過(guò)搜索JAVA_HOME變量來(lái)找到并使用安裝好的jdk,因?yàn)榘惭b好的jdk里邊有編譯運(yùn)行的java工具
(2) PATH環(huán)境變量:作用是指定命令搜索路徑,在shell下面執(zhí)行命令時(shí),它會(huì)到PATH變量所指定的路徑中查找看是否能找到相應(yīng)的命令程序。我們需要把 jdk安裝目錄下的bin目錄增加到現(xiàn)有的PATH變量中,bin目錄中包含經(jīng)常要用到的可執(zhí)行文件如javac/java/javadoc等待,設(shè)置好 PATH變量后,就可以在任何目錄下執(zhí)行javac/java等工具了。
(3) CLASSPATH環(huán)境變量:作用是指定類搜索路徑,要使用已經(jīng)編寫好的類,前提當(dāng)然是能夠找到它們了,JVM就是通過(guò)CLASSPTH來(lái)尋找類的。我們 需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設(shè)置到CLASSPATH中,當(dāng)然,當(dāng)前目錄“.”也必須加入到該變量中。
CLASSPATH環(huán)境變量不需要配置是因?yàn)樵趈ava1.5之后,把當(dāng)前目錄(運(yùn)行 java .class 時(shí)所在目錄)當(dāng)做了classpath路徑,而編譯后的.class文件和.java文件在同一目錄下,所以不需要配置
java運(yùn)行機(jī)制
java中引入了虛擬機(jī)的概念,即在機(jī)器和編譯程序之間加入了一層抽象的虛擬機(jī)器。這臺(tái)虛擬的機(jī)器在任何平臺(tái)上都提供給編譯程序一個(gè)的共同的接口。編譯程序只需要面向虛擬機(jī),生成虛擬機(jī)能夠理解的代碼,然后由解釋器來(lái)將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。在Java中,這種供虛擬機(jī)理解的代碼叫做字節(jié)碼(即擴(kuò)展為.class的文件),它不面向任何特定的處理器,只面向虛擬機(jī)。每一種平臺(tái)的解釋器是不同的,但是實(shí)現(xiàn)的虛擬機(jī)是相同的。Java源程序經(jīng)過(guò)編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機(jī)解釋執(zhí)行,虛擬機(jī)將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機(jī)器上的機(jī)器碼,然后在特定的機(jī)器上運(yùn)行,這就是上面提到的Java的特點(diǎn)的編譯與解釋并存的解釋。
即:
Java源代碼——>編譯器——>jvm可執(zhí)行的Java字節(jié)碼(即虛擬指令)——>jvm——>jvm中解釋器(邊解釋邊執(zhí)行)——>機(jī)器可執(zhí)行的二進(jìn)制機(jī)器碼——>程序運(yùn)行。
Java語(yǔ)言有哪些特點(diǎn)
(1)簡(jiǎn)單易學(xué)(Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C++語(yǔ)言很接近)
(2)面向?qū)ο?#xff08;封裝,繼承,多態(tài))
(3)平臺(tái)無(wú)關(guān)性(Java虛擬機(jī)實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性)
(4)支持網(wǎng)絡(luò)編程并且很方便(Java語(yǔ)言誕生本身就是為簡(jiǎn)化網(wǎng)絡(luò)編程設(shè)計(jì)的)
(5)支持多線程(多線程機(jī)制使應(yīng)用程序在同一時(shí)間并行執(zhí)行多項(xiàng)任)
(6)健壯性(Java語(yǔ)言的強(qiáng)類型機(jī)制、異常處理、垃圾的自動(dòng)收集等)
(7)安全性
java三大版本
(1)Java SE(J2SE,Java 2 Platform Standard Edition,標(biāo)準(zhǔn)版)
Java SE 以前稱為 J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實(shí)時(shí)環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 Java Web 服務(wù)開發(fā)的類,并為Java EE和Java ME提供基礎(chǔ)。
(2)Java EE(J2EE,Java 2 Platform Enterprise Edition,企業(yè)版)
Java EE 以前稱為 J2EE。企業(yè)版本幫助開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來(lái)實(shí)現(xiàn)企業(yè)級(jí)的面向服務(wù)體系結(jié)構(gòu)(service-oriented architecture,SOA)和 Web2.0應(yīng)用程序。2018年2月,Eclipse 宣布正式將 JavaEE 更名為 JakartaEE
(3)Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
Java ME 以前稱為 J2ME。Java ME 為在移動(dòng)設(shè)備和嵌入式設(shè)備(比如手機(jī)、PDA、電視機(jī)頂盒和打印機(jī))上運(yùn)行的應(yīng)用程序提供一個(gè)健壯且靈活的環(huán)境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對(duì)可以動(dòng)態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次,就可以用于許多設(shè)備,而且可以利用每個(gè)設(shè)備的本機(jī)功能。
總結(jié)
以上是生活随笔為你收集整理的JDK,JRE和JVM三者的关系以及java的运行机制,环境变量,三大版本,特点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux下的shell编程
- 下一篇: java位运算实例详解——(amp;)、