一、 編譯和運行Java程序必須經過兩個步驟:
1、將源文件編譯成字節碼;
2、解釋執行平臺無關的字節碼程序。
二、問題
以上兩個步驟分別需要使用javac和java兩個命令(javac命令對java源文件進行編譯生成class文件,java命令對生成的class文件進行運行),如果我們直接在cmd命令行窗口裏依次輸入javac和java命令,可能會看到以下錯誤:
另外當我們移動了class文件後,執行java命令時,會出現以下錯誤:
三、分析問題
我們已經在計算機裏安裝了JDK,而jdk的安裝路徑下也包含了java和javac命令,爲什麼會出現這樣的錯誤。
錯誤一:原因是命令行或控制檯沒有找到javac和java命令。
當我們輸入javac或java命令時,命令行會先在當前目錄中(上例爲:E:/Demo/java)查找是否有javac.exe或java.exe 這個文件,若沒有則在系統的path環境變量中查找。
錯誤二:這是因爲命令行沒有找到class文件。
當我們執行java命令時,若沒有配置classpath環境變量,則java虛擬機會在當前目錄下查找class文件(即Java類),若當前目錄下沒有,則會出錯;若我們配置了classpath環境變量,則java虛擬機會直接到環境變量指定的路徑查找。
四、解決方案
錯誤一:
根據問題分析,錯誤一的解決方案有兩種:一是需要我們找到文件所在目錄,二是直接在系統裏配置path環境變量。
很顯然第一種方法太麻煩了些,而第二種方法可謂是一勞永逸,它可以讓我們在任意目錄下都可以執行程序。那得如何配置path環境變量呢?
path環境變量
Windows操作系統根據Path環境變量來查找命令。PATH環境變量的值是一系列路徑,如我的計算機裏的path變量是這樣的:
D:\TELLHOW\java\jdk1.5.0_09\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;C:\Windows\System32;D:\app\Administrator\product\11.2.0\dbhome_1\BIN;D:\Program Files\MySQL\MySQL Server 5.5\bin
Windows將在這一系列的路徑中依次查到命令,如果能找到這個命令,則該命令是可執行的,否則就會出錯。
(path和PATH在Windows操作系統中是沒有區別的,它不區分大小寫)
因此,我們只需找到javac和java命令的存放路徑,如:D:\TELLHOW\java\jdk1.5.0_09\bin,添加進path環境變量中即可,注意用“;”分號隔開。
我們可以在命令行內直接輸入javac,按“Enter”鍵來驗證配置是否正確,若看到以上信息(這其實是javac.exe的使用信息,以後我們會用到裏面的幾個),則表示配置正確(這與路徑“E:/Demo/java”無關)。
寫到這可能有人會問,“E:/Demo/java”是誰的地址呢?很顯然這是程序javac.exe所運行文件Test.java的路徑。
錯誤二:
幾乎每一本介紹java入門的書裏都會介紹classpath環境變量的配置,在網上也有很多,但對於classpath環境變量的作用則常常語焉不詳。
其實,如果使用1.5以上版本的JDK,完全可以不用設置classpath環境變量就能正常運行程序。因爲1.5版本以上JDK有一個功能,它會自動搜索當前路徑下的類文件,而且使用Java的編譯和運行工具時,系統可以自動加載dt.jar(是關於運行環境的類庫,主要是swing的包)和tools.jar(是關於一些工具的類庫)文件中的Java類,因此不再需要設置classpath環境變量了。
但是其之前的版本並沒有這樣的功能,所以我們會看到網上會有這樣的配置:.;C:\ProgramFiles\Java\jdk1.7.0_05\lib\dt.jar;C:\Program Files\Java\jdk1.7.0_05\lib\tools.jar;
這個配置中前面一點表示當前路徑,另外是將dt.jar和tools.jar兩個文件添加到classpath環境變量裏。
從上不知道你有沒有發現問題,一個1.7版本的竟然還在使用1.4及以前的classpath環境變量配置方法,這似乎說明了一個問題,IT行業飛速發展,知識在不斷地更新,網上其實有很多的知識是滯後的,所以我們必須重視這樣的一個問題,不能太過實用主義。
那麼classpath環境變量的作用是什麼呢?
如果我們有很多類文件並放在不同的路徑下,當我們需要執行指定路徑下的文件時,這時classpath環境變量就體現了它的用處。
五、問題延伸
不知你有沒有想過,在一些特殊的情況下我們可能會使用臨時的環境變量配置。比方說我們借用別人的計算機時,卻不能改動別人的計算機設置,這時你會怎麼做?我想最好的辦法就是一個移動U盤加臨時環境變量配置。
臨時環境變量配置可以使用DOS命令,在cmd命令行中輸入set,你會看到你的計算機中所有的環境變量,如圖所示:
而通過輸入set path可顯示出path的所有變量,如圖:
而設置臨時的path環境變量則只需輸入:
set path=F:/Demo/java即可,它對計算機系統中的配置沒有影響。
另有輸入:
set path=F:/Demo/java;%path%
這表示在原有的設置上添加一個路徑,對對計算機系統中的配置沒有影響。
總結一下就是:
set:用於查看本機的所有環境變量;
set 變量名:查看一個具體的環境變量;
set 變量名=:清空一個環境變量;
set 變量名=具體值:給指定變量定義具體指;
set 變量名=具體值;%path%:在原有環境變量基礎上添加新值。
注意:這種配置方式只在當前dos窗口有效,窗口關閉後則配置消失。
同理可得,classpath環境變量的臨時配置也是一樣,在此不多囉嗦。