Java的JAVA_HOME、Path、CLASSPATH環境變量小結,能夠藉助這三個的配置去理解Oracle中的那幾個環境變量的配置做用

問題:在哪裏都能執行java命令,是和JAVA_HOME變量有關係呢仍是path中指定的那個java路徑呢??

 

剛學Java的時候,不少jdk配置教程都要求設置JAVA_HOME、Path、CLASSPATH3個變量。而Java官網有這麼一句話:jdk1.5以後的版本在安裝時不用設置CLASSPATH變量。今天我就以jdk1.5爲例,總結下三者的區別。java

Path
當咱們安裝完jdk以後,打開cmd(在非安裝目錄的路徑下)輸入javac、java,會提示找不到命令。咱們須要將命令所在的路徑添加到Path系統變量中,這時,系統就能夠找到可執行文件了。spa

Windows在查找可執行文件是這樣的:在終端輸入java時,系統就會先在當前目錄查找java程序,若是有就會執行java,不然就會在Path中指定的路徑中找,由於咱們在PATH配置了...\jdk\bin,系統會在這個路徑下找到Java程序並執行。不然就提示找不到命令。Path的做用其實就是方便咱們使用一些命令。.net

JAVA_HOME
JAVA_HOME裏面的內容是JDK安裝目錄。其實不設置JAVA_HOME也是能夠的,只要有Path就好了。可是設置JAVA_HOME能夠方便在Path中使用、更新JDK目錄。好比,jdk的安裝路徑是C:\jdk1.5.0_22,Path設置爲C:\jdk1.5.0_22\bin,而當咱們把JAVA_HOME設爲C:\jdk1.5.0_22時,設置Path就能夠寫成%JAVA_HOME%\bin,之後當咱們使用其餘版本的jdk,就能夠只修改JAVA_HOME的值,此外,當咱們要使用Redis等組件時,也能夠靈活使用JAVA_HOME作些改動。3d

CLASSPATH
編譯、運行Java程序時,JRE會去該變量指定的路徑中搜索所需的類(.class)文件,不少配置教程都讓咱們設置CLASSPATH環境變量爲:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,可是其實沒有必要。以jdk1.5爲例,當咱們配置完成後,寫個HelloWorld.java。code

 

 在cmd中進入文件目錄,能夠發現依然能夠編譯、運行blog

 

 再查看運行的詳細信息,能夠看到沒有CLASSPATH的狀況下rt.jar、當前目錄也是能夠被JVM找到的。教程

 

 也就是說,在JDK 1.5以後,徹底能夠不配置這個變量。不配置CLASSPATH,JRE會自動搜索當前路徑下的類文件。編譯、運行時,系統能夠自動加載dt.jar和tools.jar文件中的Java類。rem

  固然,使用JDK 1.5以上的版本也能夠在屬性配置CLASSPATH環境變量,一旦設置了該變量,JRE就會按照該變量指定的路徑搜索Java類(若是CLASSPATH中不包括當前路徑.,JRE就不會在當前路徑下搜索Java類)。這種方法是一勞永逸的,當咱們只是想臨時運行某些類,咱們就能夠將它們臨時加到CLASSPATH中(cmd已關閉,就沒了)。以下面所示:cmd

返回父目錄,毫無疑問父目錄沒有HelloWorld.class文件,因此運行時找不到主類。這是由於JVM只會在當前目錄、dt.jar、tools.jar中找class文件,而找不到當前目錄的子目錄中的class文件。編譯

 

 解決方法是(1)將當前目錄的子目錄用set命令臨時添加到CLASSPATH中(只在當前窗口生效),這時就能夠運行了:

 

 (2)此外想在運行Java程序時臨時指定JRE搜索Java類的路徑,也能夠使用-classpath(-cp)選項,以下面的格式。(dir是要指定的路徑名)

java -classpath dir 類名

 

java -classpath dir 類名

 

 

 

對於第二種方法,有個注意的點:採用這種方法會先在classpath中查找class文件,即時當前目錄有class也有可能找不到,以下所示:新建名爲1的一個空文件夾,進入helloworld文件夾,儘管helloworld裏面有class文件也無法識別到。

 

 也就是說,使用了-classpath選項後,JRE將嚴格按-classpath指定的路徑來搜索Java類。若是想使CLASSPATH環境變量指定的路徑還生效,能夠按下面的格式來運行Java程序。

java -classpath %CLASSPATH%;.;dir 類名

 

小結:
一、 path環境變量是先在當前目錄找執行程序,若是沒有,再到path指定目錄中去尋找。而classpath是先在classpath環境變量中去找執行程序,找到了,即便當前目錄中有一樣的執行程序也執行不到;且只要在classpath的值後面加了英文句號纔會當前目錄中來尋找執行程序。爲了方便,之後儘可能用set CLASSPATH,而不要使用-classpath的選項。

二、 在設置臨時變量時,若是想保留原有的path值,只需在新設的值後面加上%path%這樣的語句就好了。如:set path=新路徑;%path%;

三、 在使用javac和java進行編譯和執行程序時,若是出現找不到文件的狀況,在環境變量設置正確的前提下,只有兩種可能:一是目錄錯誤;二是文件名錯誤。————————————————博主「JeremyChan1887」原文連接:https://blog.csdn.net/sinat_30973431/article/details/82556821

相關文章
相關標籤/搜索