2015-09-23 64 views
2
public class a { 
public static void main(String[] args) { 
    System.out.println("Hello, World"); 
    } 
} 

對於上面的代碼,我可以通過javac a.java運行它,然後java a。什麼時候應該設置班級路徑?

但是,如果我添加了一個包吧:

package hello; 
public class a { 
public static void main(String[] args) { 
    System.out.println("Hello, World"); 
    } 
} 

我需要添加類路徑-cp來運行它:java命令../ hello.a

爲什麼我不需要在第一種情況下設置類路徑?我什麼時候需要添加-cp?

+0

我想首先理解一個類路徑是什麼是有益的[參見這裏](http://stackoverflow.com/questions/2396493/what-i S-A-類路徑 - 困惑 - 和需要 - 一個人觸摸到理解) –

回答

1

要回答你的問題

我什麼時候應該把我的類路徑

始終,你更復雜的項目,你會發現,你的類路徑中幾乎總是需要設置。這可以像您使用-cp命令或通過IDE一樣手動完成。

要回答你的第二個問題

爲什麼我不需要設置classpath中在第一種情況下

我首先要解釋一下有關類路徑的一點點。簡而言之,classpath存在告訴虛擬機在哪裏查找文件。在你沒有包的第一種情況下,默認位置被用來找到你的類,所以不需要classpath。然而,當你複雜的事情,在這一點上需要一個類路徑添加了一個包

1

類路徑是其中java(程序)尋找類。默認情況下包含一系列系統內容(用於JDK),然後還包含當前目錄:.

沒有package行,你的班級在「默認包」,這基本上沒有包。這意味着它的全名是a(或多或少),並且java將在類路徑中的每個元素CP_ELEM的文件$CP_ELEM/a.class中查找它。在默認情況下,這相當於./a.class,這很好,因爲該文件存在。

對於package系列,您的班級位於hello包中,其全名是hello.a。這意味着java將在$CP_ELEM/hello/a.class中查找它,這相當於./hello/a.class - 這不存在。但是,如果你所在的目錄恰好被稱爲「你好」,那麼java -cp .. hello.a,這相當於尋找../hello/a.class,將工作。

1

類路徑就像是告訴系統在哪裏可以找到我的課:
如果沒有classpath中java會嘗試加載類
從默認目錄(可能在您運行命令的地方)。

現在讓我們假設你把編譯後的類文件夾中的「bin」和來源「SRC」文件夾
告訴系統從「bin」的加載類文件夾,你必須給他下面的參數: -cp bin;


此外,我看你不明白的包裝系統在Java所以這裏的快速解釋:
包裝是喜歡你的類,例如目錄:
如果您將類的包設置爲package a;,並且您的類路徑目錄設置爲「bin」
您必須在「bin」文件夾中創建名爲「a」的文件夾,然後將編譯後的類移動到該源文件夾中文件,但在「SRC」文件夾

只是說你可以使用日食它位於:http://www.eclipse.org

如果這沒有幫助你,然後在此我們來看一看:https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

相關問題