一般在安裝JDK事後須要配置兩個環境變量:PATH和CLASSPATH(因爲windows平臺對系統變量的大小寫沒有要求,因此大小寫均可以,可是Linux系統中只能用大寫)。也許有人說還有一個JAVA_HOME, 其實這個變量的設置就是起到中轉的做用吧,JAVA_HOME指向咱們的JDK安裝目錄,自定義這個變量的目的大概是讓咱們比較方便的使用JDK安裝目錄吧(我的理解),因此JAVA_HOME無關緊要。java
要講PATH和CLASSPATH這兩個系統變量,就得先看一下JDK的根目錄下面的幾個文件夾了:windows
其中主要的就是bin、jre、lib三個文件夾了,工具
bin:該路徑下存放了JDK的各類工具命令,經常使用 的有javac、java等;操作系統
jre:該路徑下安裝的就是運行java程序所必須的JRE環境;設計
lib:該路徑下存放的是JDK工具 命令的實際執行代碼程序,該文件夾下的dt.jar 和tools.jar是工具命令的類文件(.class);blog
下面咱們就來說一下PATH和CLASSPATH這兩個系統變量:編譯
首先編譯和運行java程序須要兩步驟:class
一、將.java源文件編譯成.class字節碼;變量
二、解釋執行與平臺無關的字節碼程序;jdk
這兩步分別用到javac 和java這兩個命令。
當咱們運行這兩個命令的時候,計算機是如何找到這兩個命令的呢?也就是如何找到這兩個命令的路徑的?因此咱們就要爲這樣的工具命令設置路徑,讓計算機可以本身找到他們。windows操做系統都是根據系統變量PATH來查找命令的,因此咱們就將工具命令(bin目錄)的路徑加到path路徑上面,計算機就能找到了(將D:\Java\jdk1.7.0_01\bin加入到path環境變量中):
環境變量中不一樣路徑之間用分號隔開,Linux下面用冒號隔開。
這樣的話在dos環境裏面運行java、javac等工具命令時,計算機就能自動找到命令所在路徑並執行了。
接下來計算機根據path裏面的路徑找到命令了,可是這個路徑(也就是bin目錄)存放的是工具命令的一個引用(快捷方式吧),具體的工具命令程序是保存在lib目錄下的,因此這個時候計算機單單找到工具命令還不行,還要找到它的執行體,而這個執行體都是一些java的通過編譯後的.class文件(lib目錄下的dt.jar和tools.jar),因此咱們要設置一個環境變量,將這兩個文件(即類包dt.jar和tools.jar)路徑放到 環境變量中,以便於計算機能找到執行。
而對於類文件,java設置了一個環境變量CLASSPATH專門來指向類文件,計算機根據這個環境變量下面的路徑,就能找到相對應的類文件並執行了。因此jdk安裝後,要把D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar兩個路徑加入到CLASSPATH中。
而咱們一般設置的CLASSPATH路徑前面還有一個點,即完整的CLASSPATH是 .;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar
這個點是用來幹什麼的呢?(假設有一個已經編譯好了的java文件Hello.class)
咱們執行這個文件 java Hello 這個時候JRE是到哪裏搜索這個文件呢?可能有人說當前路徑下搜索啊!這是對的,是在當前路徑下搜索,可是JDK1.4及以前的版本沒有設計這個功能,這意味着即便當前路徑包含着Hello.class這個文件,在執行 java Hello 這個命令時,系統也找不到Hello這個類。
因此在JDK1.4及以前的版本中須要在ClassPATH環境變量中添加一個點(.),用來告訴JRE須要在當前路徑下搜索JAVA類。因此CLASSPATH也就有了上面的路徑 (.;D:\Java\jdk1.7.0_01\lib\dt.jar;D:\Java\jdk1.7.0_01\lib\tools.jar)。
總之,classPATH這個環境變量就是用來尋找類的。把相應的類路徑添加進去,系統就能自動檢索到並執行。
在JDK1.5及以後發佈的版本中,能夠不用設置CLASSPATH這個環境變量了,由於JRE比之前更智能了,它會自動搜索當前路徑下的類文件,並且在使用java的編譯和運行工具時,系統也能夠自動加載dt.jar和tools.jar文件中的java類,所以再也不須要設置CLASSPATH環境變量。
可是當咱們使用JDK1.5及以後發佈的版本時,若是設置了CLASSPATH這個環境變量,JRE將會按照CLASSPATH環境變量指定的路徑來搜索java類,而不會自動尋找java類的,因此要本身設置CLASSPATH的話,必定要設置正確,否則運行不了!