2012-12-03 79 views
7

我想關於java編寫的引擎蓋下看。所以我把我的IDE路程,使用MS-DOS命令行啓動...java編譯器如何找到類文件,而類路徑未設置爲jdk路徑?

我創建了一個簡單的項目,如下面的樹描述:

SampleApp

|____**src** 

     |_____pack 
       |______Sample.java 
|____**classes** 

這是Sample.java源代碼:

public class Sample 
{ 

    private String s = new String("Hello, world"); 

    public Sample(){ 
      System.out.println(s); 
    } 
} 

我只是想編譯這個類,所以我用javac命令:

prompt\SampleApp\src>javac -d ..\classes -sourcepath . pack\Sample.java 

所有工作正常,但我沒想到,因爲我編譯我的Sample.java文件之前刪除了我的CLASSPATH環境變量。所以我期待編譯器錯誤,因爲編譯器無法找到java.lang.String類文件。

我讀這篇文章http://www.ibm.com/developerworks/java/library/j-classpath-windows/這讓我明白了許多事情。文章作者說默認的類路徑是當前的工作目錄。但我不明白爲什麼我的源代碼編譯沒有錯誤。有人可以向我解釋這一點嗎?

回答

6

所以我期待編譯錯誤,因爲編譯器將無法找到java.lang.String類文件。

簡短的答案是,編譯器知道在哪裏可以找到所有標準的Java SE類庫都沒有你告訴它。

較長的答案是:String班正在上引導類路徑中。這是隱含javac命令設置爲引用在JDK安裝相關的JAR文件。 javac命令在尋找常規類路徑上的東西之前搜索bootclasspath。

+0

謝謝你的回覆。它真的幫助我!我會尋找更多關於bootclasspath的信息。 –

5

CLASSPATH變量不會做你的想法。舉Oracle文檔:

CLASSPATH變量就是告訴應用程序,包括 JDK工具,到哪裏尋找用戶類的一種方式。 (的類是 的JRE,JDK平臺部,和擴展應該通過其他 來定義,如引導類路徑或擴展目錄。)

來源:http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

基本上自java.lang.*是平臺的一部分,隨JDK/JRE提供,編譯器不必告訴你在哪裏尋找它們。

+0

感謝您的答覆。事情現在更清楚了。 –