Java中JAVA_HOME與CLASSPATH的解析)

來源:互聯網
上載者:User
很多人在初學Java的時候經常會被書中介紹的一堆環境變數的設定搞得頭昏腦脹,很多書中都會在初裝JDK的時候讓他大家設定JAVA_HOME環境變數,在開發程式的時候設定CLASSPATH環境變數,而很多人並不理解這兩個環境變數的作用,我們來分別進行詳細的闡述。
    首先是JAVA_HOME環境變數,我們先來掌握這個環境變數的設定內容,JAVA_HOME這個環境變數的設定內容是JDK的安裝目錄,比如說您的JDK安裝在d:\jdk1.6.0這個目錄下,請您查看一下這個目錄下是不是有一個子目錄bin,bin目錄中是不是有java.exe這個檔案,如果是,那麼您的JAVA_HOME環境變數的內容應該為d:\jdk1.6.0。那麼我們設定這個環境變數的作用是什麼呢?就單獨的java開發而言,這個環境變數並沒有任何作用,這就是很多根據書上的描述設定好之後,把一本書學完也沒有用到這個變數,所以很是不理解。
    其實JAVA_HOME變數最好還是設定一下,首先,我們為了能夠編譯和運行java程式,需要在PATH環境變數中把java.exe所在的目錄設定為PATH變數的一部分,目的是為了能夠通過命令列運行javac和java命令成為可能,當你在命令列中輸入javac ...或者java ...的時候,如果提示你一個錯誤:'javac' 不是內部命令或外部命令,也不是可啟動並執行程式或批次檔。這時候說明作業系統沒有找到你通過命令列輸入的javac這個命令,為什麼呢?因為作業系統並不知道你的javac.exe這個檔案在哪裡,所以無法執行對應的檔案。那麼為了能夠讓作業系統找到這個可執行檔,我們就需要把javac.exe這個可執行檔所在的目錄作為PATH環境變數的一部分設定起來,這樣當你在命令列輸入一個命令的時候,作業系統就會自動搜尋PATH變數中所指定的所有目錄了。在Windows系統中PATH變數中的所有路徑採用分號分割,如果在Linux系統中採用冒號分割。另外說明一點,如果你設定好了環境變數,在命令列中還是出現同樣的錯誤,那麼有兩種可能,一種就是你的設定不正確,另一種就是你的設定沒有生效,一般你可以關閉命令列視窗再重新開啟就可以了。這對這個設定,以剛才的目錄為例,那麼PATH變數中的內容就是...;d:\jdk1.6.0\bin,這時候我們可以借用已經設定過的JAVA_HOME,將PATH的內容修改為:...;%JAVA_HOME%\bin,這樣的設定有一定的好處,當你的系統中重新安裝JDK,並改變過目錄的話,你只要修改JAVA_HOME的內容就可以了,PATH則不需要修改。此外,JAVA_HOME變數還會有一些其他用途,比如Eclipse這個IDE,它本身是由java程式編寫的,那麼在啟動並執行時候必然需要虛擬機器的存在,所以Eclipse在啟動時需要尋找虛擬機器,如果有JAVA_HOME這個變數,那麼Eclipse就會利用這個變數找到虛擬機器的路徑。所以雖然開始JAVA_HOME環境變數可以不設定,但是還是建議大家為以後考慮而設定上。
    我們繼續來談論CLASSPATH的問題,很多書上在講解java程式的時候建議大家設定CLASSPATH這個環境變數,我們這裡不建議大家設定。原因我們會在稍後的時候看到。講到CLASSPATH,我們首先來看編寫java程式時一直在用的兩個命令javac和java。
    javac的命令文法是這樣的:
        javac <選項> <源檔案>
    我們常用的情況是這樣的:
        javac -classpath <類路徑>  <要編譯的java源檔案>
    這裡的類路徑輸入什麼呢?這裡的類路徑是指要編譯的java源檔案中所用的非java的基礎API中的類在那個目錄下,路徑可以是多個目錄,用分號隔開來。比如說我們要編譯App.java這個檔案,而這個檔案中用到了com.util這個包中的MyDate這個類,現在我們假設MyDate這個類存在目錄是:d:\mylib\com\util\MyDate.class,那麼我們如何編譯App這個類呢?我們的命令如下:
    javac -classpath d:\mylib  App.java
    注意這裡的classpath的內容,我們只是指定路徑到package所在目錄,並不能把package一起指定進去,而且MyDate.class必須在com\util這個目錄中,因為這個類定義了package為com.util。好了現在你對javac中的classpath明白了嗎?
    我們再來看java這個命令,這個命令的文法是這樣的:
    java [選項] 類 [參數]
    比如說以上面的例子,我們假設App這個類位於com.app這個package中,它的存放目錄是:d:\dev\myapp\com\app\App.class,那麼我們該如何運行這個類呢?命令如下:
    java -classpath d:\dev\myapp;d:\mylib com.app.App
    從命令中我們可以看到,在classpath後面我們指定兩個目錄,分別是App這個類的package所在的目錄和MyDate這個類的package所在的目錄,這裡的類路徑要給定的是要啟動並執行類和這個類用到的所有類的package所在的目錄,多個目錄之間用分號隔離開來,最後指定要啟動並執行類的時候必須加上package。
    好了到這裡你應該徹底掌握了編譯java程式和運行java程式的訣竅了吧。如果我們在系統內容變數中設定了CLASSPATH的話,在命令列中通過java啟動並執行時候如果再不指定CLASSPATH參數,那麼就會導致java虛擬機器只是按照CLASSPATH環境變數中的目錄搜尋類,而不在你的目前的目錄下搜尋類,結果自然會出現Exception in thread "main" java.lang.NoClassDefFoundError,所以當你看到這個錯誤的時候請查看一下你的系統內容變數,如果沒有設定CLASSPATH,那麼在檢查一下你的目前的目錄。為了確保萬無一失,按照上面講述的例子進行操作是不會發生任何錯誤。
    最後祝遇到此類的麻煩的朋友早日解決問題!
本文轉自CSDN部落格,轉載請標明出處:http://blog.csdn.net/stevencn76/archive/2007/09/13/1784272.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.