已經配置了很多次jdk了,每次都是安裝網上的教程配的,今天突然想了解了解原理了,整理一下!
參考貼(
http://blog.csdn.net/wkupaochuan/article/details/7462180(講解的不全)
http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html(百度經驗,里面有詳細的配置過程,后面我就不說了)
)
通常在安裝JDK過后需要配置兩個環境變量:PATH和CLASSPATH(由於windows平台對系統變量的大小寫沒有要求,所以大小寫都可以,但是Linux系統中只能用大寫)。
也許有人說還有一個JAVA_HOME, 其實這個變量的設置就是起到中轉的作用吧,JAVA_HOME指向我們的JDK安裝目錄,自定義這個變量的目的大概是讓我們比較方便的使用JDK安裝目錄吧(個人理解),所以JAVA_HOME可有可無。
要講PATH和CLASSPATH這兩個系統變量,就得先看一下JDK的根目錄下面的幾個文件夾了:

其中主要的就是bin、jre、lib三個文件夾了,
bin:該路徑下存放了JDK的各種工具命令,常用 的有javac、java等;
jre:該路徑下安裝的就是運行java程序所必須的JRE環境;
lib:該路徑下存放的是JDK工具 命令的實際執行代碼程序,該文件夾下的dt.jar 和tools.jar是工具命令的類文件(.class);
下面我們就來講一下PATH和CLASSPATH這兩個系統變量:
首先編譯和運行java程序需要兩步驟:
1、將.java源文件編譯成.class字節碼;
2、解釋執行與平台無關的字節碼程序;
這兩步分別用到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的話,一定要設置正確,不然運行不了!
