為了協助大家更好的學習JAVA的基本知識,同時也是鍛煉自己的Type水平,於是有了這篇文章的誕生。主要參考資料來自來自官方JDK文檔,希望對大家有用(所說的觀點針對1.4.2 and 5.0版本)。
1. 預備知識
1.1安裝JDK
到http://java.sun.com 根據不同的作業系統,下載相應的J2SE JDK 版本 (寫這篇文章時最新的JDK 為1.5 update 7)。假定我們把JDK安裝到D:/JDK/1507 ,不安裝public JRE。
1.2 設定path
在[我的電腦]上右擊,選擇[屬性]。再選擇[進階]-[環境變數],在[系統變數]中添加一個新的變數
JAVA_HOME=D:/JDK/1507,然後再編輯path變數,在原來的path前面添加[ %JAVA_HOME%/BIN; ]
(方框中的文字)。這樣就完成了JAVA的基本設定。(windows 98 下如何在autoexec.bat 中設定,請自己找資料)
1.3 示範程式
為了協助理解,我寫了一個JavaBootTest.java 的小程式來顯示。
public class JavaBootTest { public static void main(String[] args) { System.out.println(" The Classpath are: "); System.out.println(System.getProperty("java.class.path")); //other program lines } } |
用下面的兩條命令分別編譯和運行。
javac JavaBootTest.java
java JavaBootTest
2. JAVA程式運行時如何尋找類檔案
根據JDK 文檔說明, JAVA 程式以以下3種順序尋找啟動並執行類檔案。
1.Bootstrap classes (*)
2.Extension classes
3.Users classes
2.1 Bootstrap classes
就是JAVA在啟動時載入的類檔案,這些類檔案主要是rt.jar 和 jre/lib 目錄下的一些類檔案。Bootstrap過程中的class path是儲存在 sun.boot.class.path 系統屬性中的。可以通過System.out.println(System.getProperty("sun.boot.class.path")); 來顯示。同時Bootstrap classes 可以通過 -Xbootclasspath 命令列參數來指定。
下面列出了系統中預設的Bootstrap classes:
jre/lib/rt.jar; jre/lib/i18n.jar;
jre/lib/sunrsasign.jar; jre/lib/jsse.jar;
jre/lib/jce.jar; jre/lib/charsets.jar;
jre/classes
* Bootstrap
bootstrap是皮鞋後部的一條小帶子或一個小環,它可以使你方便地把鞋子穿起來。在電腦中,是指使用一個很小的程式將某個特定的程式(通常是指作業系統)載入電腦中。
2.2 Extension classes (擴充類檔案)
Extension classes 主要是指的jre/lib/ext 目錄下的類檔案,這些檔案必須在jar 檔案或 zip 檔案中。如果不同名字的jar 檔案包含有相同的類檔案,那麼哪一個類檔案被載入是不確定的。
2.3 User classes (使用者自訂的類檔案)
現在到了最重要的地方了,我們常說的設定CLASSPATH 其實就是指定 User classes。JAVA 按照以下四種順序尋找User classes。
2.3.1. 預設的User classes . (dot) 就是指目前的目錄。
2.3.2. 系統變數 CLASSPATH 所指定的類庫,該變數覆蓋(override)預設的User classes。
2.3.3. 用命令列參數 -cp 或 -classpath指定的類庫。這個時候覆蓋預設的User classes 和CLASSPATH變數。
2.3.4. 通過-jar 參數指定的jar檔案。此時覆蓋上面的三種情況,如果使用這種情況,所有的類檔案必須來自指定的jar 檔案。
瞭解了java如何尋找User classes,我們接下來將要學習如何設定 CLASSPATH變數。
3 如何正確設定CLASSPATH
如果只是一般運用java,只是用到java的基本庫檔案,練練手而已,則不需要設定CLASSPATH 。
但是在一般開發情況下,這是很少遇到的。所以我們要自己設定CLASSPATH 。
我們一般的方法就是按照2.3.2 來設定CLASSPATH 系統變數,像開始設定path一樣,我們可以添加一個CLASSPATH的系統變數。網上有些文章所提到的添加rt.jar 和 tools.jar 等等是不需要的,因為這些類庫是屬於Bootstrap classes的。我們只要定義User classes ,如果我們要編譯servlet 那麼只要servlet-api.jar 和 jsp-api.jar 就可以實現基本的需要了。
另外要注意的是2.3.2 override 2.3.1。我們設定CLASSPATH 時要將 .(dot)[表示目前的目錄]放在CLASSPATH中,然後用 ;(semicolon)分隔開來。由於其他提供的類檔案都是放在jar檔案中,我們設定時一定要將完整的jar 檔案包含在CLASSPATH 中,而不是將其目錄添加到CLASSPATH 中(很重要的一點,我以前就是理解錯誤了)。
這個時候又一個問題出現了,當需要添加的jar 檔案過多時,管理java 類庫變得很麻煩。所以我認為在基礎學習時用命令列編譯調試,有利於JAVA的學習,但是到開發時則一定要用到 IDE 工具(現在比較流行的是eclipse 和 netbeans ,還有些人喜歡 jcreator) 。
在eclipse 中通過 [windows][Preferences][Java][Build Path]來指定。其中有兩部分Classpath Variables & User Libraries。如何設定在這裡就不詳細說明了,自己試一下就可以了,比較簡單。在建立項目時,把自己定義的變數添加到Build Path 中就可以了。