2013-10-15 69 views
0

我打算成爲一名經過認證的Java程序員,並正在從Sierra-Bates書籍中學習。我有一個關於classpaths的問題。類路徑只需要找到我正在運行/編譯的類的支持類,還是支持類和類本身?另外,當我從類路徑獲取包中的類時,僅放置文件的地址(路徑)是合法的,而不是放入它的根包。謝謝。使用類路徑

回答

1

1 - 類路徑必須允許訪問需要在程序中運行的每個類。這將包括主要類和它調用的任何類。如果在其中一個類中有一些永遠不會調用的代碼,在很多情況下,您不需要使用未調用代碼引用的類。

2 - 您必須將包的根放入類路徑中。因此,類「com.bob.myprog.Main」需要將類路徑指向「com」包/文件夾所在的文件夾。它需要包含一個「bob」文件夾,「bob」需要包含一個帶有「Main.class」的「myprog」文件夾。

+0

如何編譯?考慮以下目錄結構:food-> test-> xcom-> A.class,B.java(其中「 - >」表示左側的目錄包含右側的目錄/文件)和以下代碼:package xcom ; public class A {} package xcom; public class B extends A {}將test作爲當前目錄,您將如何使用命令行中的javac編譯B.java? – user2884033

+0

包含「xcom」的文件夾將需要位於類路徑中。這就是「測試」。 –

+0

這是一個糟糕的例子,對不起。我想問的是類路徑只需要找到A.class,或A.class和B.java。 – user2884033

0

類路徑必須包含支持類和類本身。

但是,有時你可以在不指定classpath的情況下運行單個文件(並且它可以工作)。 作爲http://docs.oracle.com/javase/tutorial/essential/environment/paths.html規定:

類路徑的默認值是,這意味着只有 搜索當前目錄「」指定CLASSPATH 變量或-cp命令行開關將覆蓋此值。

因此,如果你有在當前目錄編制了MyClass類,下面的工作:

java MyClass 

一邊指着類路徑到另一個目錄將導致錯誤(類路徑不再包含MyClass的) :

java -cp lib MyClass 



當你在一個包中的類,它是不夠的,把地址給類文件中類路徑。據SCJP Sun認證的程序員對Java 5的學習指南:

爲了找到一個包中的類,你必須有一個目錄中 classpath中有包的最左邊的條目(包的 「根「)作爲子目錄。