接著來了解壹下安裝的東西有哪些。這裏假設JDK與公用JRE各安裝至C:\Program Files\Java\jdk1.5.0_06\及C:\Program Files\Java\jre1.5.0_06\。
公用JRE主要是為開發好的Java程序提供執行的平臺。前面曾經說過,JDK本身也有自己的JRE,這個JRE位於JDK安裝目錄的jre目錄下。以前面的安裝為例,就是在C:\Program Files\Java\jdk1.5.0_06\jre中,JDK本身所附的JRE主要是開發Java程序時做測試之用。與公用JRE的主要差別在於JDK本身所附的JRE比公用JRE多了個server的VM(Virtual Machine)執行選項,如圖2-5和圖2-6所示。通過查看C:\Program Files\Java\jdk1.5.0_06\jre\bin與C:\Program Files\Java\jre1.5.0_06\bin就可以了解。
圖2-5 JDK的JRE有server選項 圖2-6 公用JRE沒有server選項
server與client選項的差別在於所使用的VM不同,執行Java程序時默認會使用client VM。若使用server VM,會花比較長的啟動時間及消耗較多的內存,為的是啟動Java程序後可以獲得較好的執行效能。初學者現階段不用在乎啟動server或client VM的差別,只要先知道有這兩種VM即可。
如圖2-7所示,繼續來看看JDK的安裝目錄下有哪些東西。
圖2-7 JDK安裝目錄的內容
bin目錄
提供的是JDK的工具程序,包括javac、java、javadoc、appletviewer等程序。
demo目錄
壹些使用Java編寫好的範例程序。
jre目錄
JDK自己附帶的JRE。
lib目錄
工具程序實際上會使用的Java工具類(例如,javac工具程序實際上會去使用tools.jar中的com/sun/tools/javac/Main類)。
src.zip
Java提供的API類的源代碼壓縮文件。如果將來需要查看API的某些功能是如何實現的,可以查看這個文件中的源代碼內容。
在大致了解JDK與JRE安裝目錄下的內容之後,這裏作個總結,您到底要記得哪些東西?答案是JDK安裝目錄下的bin目錄。因為當您編寫完Java程序之後,無論是編譯或執行程序,都會使用到bin目錄下所提供的工具程序。
2.2 設置Path與Classpath
對於習慣圖形化接口操作的初學者而言,在命令符模式下執行程序是壹件陌生的事,也因此不了解Path路徑設置的方法與作用,而Java執行的平臺也有自己的壹套路徑規則來尋找編寫好的Java類,也就是所謂的Classpath設置。本節將介紹如何進行這些相關的設置。
2.2.1 設置Path
在安裝好JDK程序之後,在JDK安裝目錄(假設是C:\Program Files\Java\jdk1.5.0_06)下的bin目錄中,會提供壹些開發Java程序時必備的工具程序。對於Java的初學者,建議從命令符模式(在Windows 2000/XP下稱之為命令提示符)下來操作這些工具程序。您可以在Windows 2000/XP的“開始”菜單中選擇“運行”,輸入“cmd”命令來打開命令符模式。
雖然您知道JDK的工具程序是位於bin目錄下,但您的操作系統並不知道如何找到這些工具程序。所以當您輸入javac嘗試執行編譯程序時,命令符模式下會告訴您找不到javac工具程序,如圖2-8所示。
圖2-8 出現這個信息表示找不到指定的工具程序
您必須告訴操作系統,應該到哪些目錄下嘗試找到您所想使用的工具程序。有幾個方法可以進行這項設置,最簡便的方法就是設置系統變量中的Path環境變量。在Windows 2000/XP下可以選擇桌面上的“我的電腦”並單擊鼠標右鍵,選擇“屬性”後切換至“高級”頁面,並單擊下方的“環境變量”按鈕,在“環境變量”對話框中編輯Path變量,如圖2-9所示。
圖2-9 選擇Path變量並單擊“編輯”按鈕以進行路徑設置
如圖2-10所示,在Path變量的“編輯系統變量”對話框中,在“變量值”文本框中先輸入壹個“;”,接著輸入JDK bin目錄的路徑(這裏假設是C:\Program Files\Java\jdk1.5.0_06\bin),然後單擊“確定”按鈕即可完成設置。
圖2-10 在Path變量中加入JDK的bin目錄路徑
設置Path變量之後,要重新打開壹個命令符模式才能重新讀入Path變量內容,接著如果執行javac程序,應該可以看到圖2-11所示的畫面。
圖2-11 若設置Path變量成功,就可以找到指定的工具程序
也可以在命令符模式下執行以下的命令,直接設置目前的環境變量,包括Path變量(這個設置在下次重新打開命令符模式時就不再有效):
set Path=%Path%;C:\Program Files\Java\jdk1.5.0_06\bin
由於以上介紹的Path設置都是尋找JDK安裝目錄下的bin目錄,所以操作系統會搜索JDK安裝目錄下的工具程序。這樣當執行java程序時,默認會使用JDK所附的JRE(即C:\Program Files\Java\jdk1.5.0_06\jre),而不是公用的JRE(即C:\Program Files\Java\jre1.5.0_06\)。
簡單地說,操作系統會嘗試在指定的Path變量中尋找指定的工具程序。當輸入javac命令時,由於Path變量中有設置JDK的bin目錄的路徑,操作系統就可以根據這個信息來找到javac工具程序。
2.2.2 設置Classpath
Java執行環境本身就是壹個平臺,執行於這個平臺上的程序是已編譯完成的Java程序(後面會介紹到Java程序編譯完成之後,會以.class文件存在)。如果將Java執行環境比喻為操作系統,如果設置Path變量是為了讓操作系統找到指定的工具程序(以Windows來說就是找到.exe文件),則設置Classpath的目的就是讓Java執行環境找到指定的Java程序(也就是.class文件)。
有幾個方法可以設置Classpath,最簡單的方法是在系統變量中新增Classpath環境變量。在圖2-9中的“系統變量”下單擊“新建”按鈕,在“變量名”文本框中輸入Classpath,在“變量值”文本框中輸入Java類文件的位置。例如可以輸入“.;C:\Program Files\Java\jdk1.5.0_06\lib\tools.jar; C:\Program Files\Java\jdk1.5.0_06\lib\rt.jar”(jar文件是zip壓縮格式,其中包括.class文件和jar中的Classpath設置),每壹路徑中間必須以;作為分隔。
事實上JDK 5.0默認就會到當前工作目錄(上面的.設置),以及JDK的lib目錄(這裏假設是C:\Program Files\Java\jdk1.5.0_06\lib)中尋找Java程序。所以如果Java程序是在這兩個目錄中,則不必設置Classpath變量也可以找得到,將來如果Java程序不是放置在這兩個目錄時,則可以按上述設置Classpath。
如果所使用的JDK工具程序具有Classpath命令選項,則可以在執行工具程序時壹並指定Classpath。例如:
javac -classpath classpath1;classpath3...
其中classpath1、classpath 2是實際要指定的路徑。也可以在命令符模式下執行以下的命令,直接設置目前的環境變量,包括Classpath變量(這個設置在下次重新打開命令符模式時就不再有效):
set CLASSPATH=%CLASSPATH%;classpath1;classpath3...
總而言之,設置Classpath的目的,在於告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序。
良葛格的話匣子:
以上介紹的是幾個簡單的Path與Classpath設置方式,實際上還有壹些設置方式。本章最後列出了幾個介紹Path、Classpath設置的網絡資源鏈接,內容包括其他操作系統下的設置方式,您可以從中進壹步了解相關的設置。
2.3 第壹個Java程序
完成JDK相關環境設置之後,無論如何就先寫壹個簡單的Java程序,以測試壹下環境設置是否正確,順便增強壹些學習的信心。以下要介紹的第壹個Java程序是會顯示“嘿!我的第壹個Java程序!”這段信息的簡單程序。
2.3.1 編寫和編譯Java程序
在正式編寫程序之前,先確定可以看得到的文件的擴展名。在Windows 2000/XP下默認是不顯示文件的擴展名的,這會造成重新命名文件時的困擾。如果目前在“資源管理器”下無法看到文件的擴展名,應先執行工具欄上的“工具”|“文件夾選項”並切換至“查看”頁面,取消“隱藏已知文件類型的擴展名”復選框,如圖2-12所示。
圖2-12 取消“隱藏已知文件類型的擴展名”復選框以顯示擴展名
接著選擇壹個目錄來編寫Java源代碼文件。假設該文件存儲在C:\workspace目錄,您要新增壹個“文本文件”(也就是.txt文件),並重新命名文件為HelloJava.java。由於是將文本文件的擴展名從.txt改為.java,所以系統會詢問您是否更改擴展名,應確定更改,接著雙擊HelloJava.java打開文件,並照著圖2-13所示編寫程序。
圖2-13 第壹個Java程序
這個程序有幾點必須註意:
Java的源文件必須以擴展名 .java結束
這也就是必須讓“資源管理器”顯示擴展名的原因。
主文件名與類名稱必須壹致
Java程序的類名稱是指class關鍵詞(Keyword)後的名稱。就這個例子而言,也就是HelloJava,該名稱必須與HelloJava.java的主文件名(HelloJava)壹致。
註意每個字母的大小寫
Java程序中會區分字母的大小寫,System與system對Java程序來說是不壹樣的名稱。
空白只能是半角空格符或是Tab字符
有些初學者可能不小心輸入了全角空格符,這很難檢查出來。
寫好程序並存盤後,接著打開壹個命令符模式,並使用以下的命令切換至HelloJava.java所在的目錄(在此例中是C:\workspace):
> cd C:\workspace
接著使用javac工具程序來編譯.java文件,這裏指定編譯HelloJava.java。命令如下:
C:\workspace\javac HelloJava.java
如果編譯順利成功,則在HelloJava.java所在的目錄,會出現壹個HelloJava.class文件,這是已經編譯完成的Java字節碼(Bytecodes)文件程序。
您可能會遇到以下的幾個錯誤,這表示您有壹些地方操作有誤:
error: cannot read: HelloJava.java
這表示javac工具程序找不到您指定的.java文件,請檢查文件是否存在目前的目錄中,或是文件名稱是否有誤。
HelloJava.java:1: class HelloJava is public, should be declared in a file named HellJava.java
類名稱與主文件名不符,請確定主文件名與類名稱是相同的。
HelloJava.java:3: cannot find symbol
程序代碼中某些部分輸入錯了,最常發生的原因可能是沒有註意到字母大小寫。
javac 不是內部或外部命令、可執行的程序或批量文件
Path設置有誤或沒有在Path中加入JDK的bin目錄,請參考2.2節的內容。
2.3.2 執行Java程序
在順利編譯出 .class的文件之後,可以使用java工具程序來執行它。執行時必須指定類名稱,就以上的例子來說,也就是指定HelloJava.class這個文件的主文件名。命令執行方式如下:
C:\workspace>java HelloJava
java工具程序會根據您指定的類名稱,實際加載.class的文件,以上例來說,就是載入HelloJava.class並執行,執行的結果應該是圖2-14所示的畫面。
圖2-14 執行第壹個Java程序的成功畫面
您可能會遇到以下的幾個錯誤,這表示您有壹些地方操作有誤:
Exception in thread"main" java.lang.NoClassDefFoundError
java工具程序找不到您所指定的類,請確定指定的類存在目前的目錄中,名稱是否指定正確(如果是舊版的JDK,可能必須在Classpath中加入.,表示可於目前目錄中找到所指定的類)。
Exception in thread "main" java.lan.NosuchMethodError: main
沒有指定Java程序的入口(Entry Point)。java工具程序指定的類必須要有壹個程序入口,也就是必須包括main(String[] args)這個方法(Method),請確定您的程序中包括它,必須與圖2-13所示的HelloJava.java內容壹致。
在後面的章節中,如果不是要特別強調,就不再重復指出如何編譯與執行Java程序。當在後面的章節中說要編譯Java程序時,就是指使用javac工具程序來編譯.java;而說要執行Java程序時,就是指使用java工具程序來執行指定的Java類。