JDK,開(kāi)發(fā)java程序用的開(kāi)發(fā)包,JDK里面有java的運(yùn)行環(huán)境(JRE),包括client和server端的。需要配置環(huán)境變量。。。。
JAVA11開(kāi)始使用JDK自帶的JRE即可,不需要JRE了。環(huán)境變量只需要配置PATH即可,其他不需要配置
JRE,運(yùn)行java程序的環(huán)境,JVM,JRE里面只有client運(yùn)行環(huán)境,安裝過(guò)程中,會(huì)自動(dòng)添加PATH。
大家肯定在安裝JDK的時(shí)候會(huì)有選擇是否安裝單獨(dú)的jre,一般都會(huì)一起安裝
具體它們的區(qū)別:
Jre 是java runtime environment, 是java程序的運(yùn)行環(huán)境。既然是運(yùn)行,當(dāng)然要包含jvm,也就是大家熟悉的虛擬機(jī)啦,還有所有java類(lèi)庫(kù)的class文件,都在lib目錄下打包成了jar。大家可以自己驗(yàn)證。至于在windows上的虛擬機(jī)是哪個(gè)文件呢?大家看看jre/bin/client里面是不是有一個(gè)jvm.dll呢?那就是虛擬機(jī)。
Jdk 是java development kit,是java的開(kāi)發(fā)工具包,里面包含了各種類(lèi)庫(kù)和工具。當(dāng)然也包括了另外一個(gè)Jre. 那么為什么要包括另外一個(gè)Jre呢?而且jdk/jre/bin同時(shí)有client和server兩個(gè)文件夾下都包含一個(gè)jvm.dll。說(shuō)明是有兩個(gè)虛擬機(jī)的。這一點(diǎn)不知道大家是否注意到了呢?
相信大家都知道jdk的bin下有各種java程序需要用到的命令,與jre的bin目錄最明顯的區(qū)別就是jdk下才有javac,這一點(diǎn)很好理解,因?yàn)? jre只是一個(gè)運(yùn)行環(huán)境而已。與開(kāi)發(fā)無(wú)關(guān),正因?yàn)槿绱?,具備開(kāi)發(fā)功能的jdk自己的jre下才會(huì)同時(shí)有client性質(zhì)的jvm和server性質(zhì)的 jvm, 而僅僅作為運(yùn)行環(huán)境的jre下只需要client性質(zhì)的jvm.dll就夠了。
記得在環(huán)境變量path中設(shè)置jdk/bin路徑麼?這應(yīng)該是大家學(xué)習(xí)Java的第一步吧,老師會(huì)告訴大家不設(shè)置的話(huà)javac和java是用不了的。確實(shí)jdk/bin目錄下包含了所有的命令。可是有沒(méi)有人想過(guò)我們用的java命令并不是 jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個(gè)實(shí)驗(yàn),大家可以把jdk/bin目錄下的java.exe剪切到別的地方再運(yùn)行 java程序,發(fā)現(xiàn)了什么?一切OK!
那么有人會(huì)問(wèn)了?我明明沒(méi)有設(shè)置jre/bin目錄到環(huán)境變量中啊?
試想一下如果java為了提供給大多數(shù)人使用,他們是不需要jdk做開(kāi)發(fā)的,只需要jre能讓java程序跑起來(lái)就可以了,那么每個(gè)客戶(hù)還需要手動(dòng)去設(shè)置環(huán)境變量多麻煩?。克园惭bjre的時(shí)候安裝程序自動(dòng)幫你把jre的java.exe添加到了系統(tǒng)變量中,驗(yàn)證的方法很簡(jiǎn)單,大家看到了系統(tǒng)環(huán)境變量的 path最前面有“%SystemRoot%system32;%SystemRoot%;”這樣的配置,那么再去Windows/system32下面去看看吧,發(fā)現(xiàn)了什么?有一個(gè)java.exe。
如果強(qiáng)行能夠把jdk/bin挪到system32變量前面,當(dāng)然也可以迫使使用jdk/jre里面的java,不過(guò)除非有必要,我不建議大家這么做。使用單獨(dú)的jre跑java程序也算是客戶(hù)環(huán)境下的一種測(cè)試。