而最好的答案應該是B. C也工作在某些平臺上,但不建議,是非常罕見的(至少我在Java編程超過10年的時間裏並沒有看到它)。
編輯
在Java初學者一個常見的誤解是,類名是一樣的東西 「MyClass的」。但這並不準確;如被看見在聲明class MyClass
命名「MyClass的」是真的,編譯器與包聲明相結合,創造了Java的指的是作爲一個合格的類名,這是所有類名真的是到運行時的程序員提供了方便。 (在C#中,它們爲此使用命名空間)。
這在許多情況下,如堆棧跟蹤和方法簽名,其總是包含,例如,java.lang.String中變得相當明顯。因爲「String」只是一個解析爲java.lang.String的簡短形式。你可以通過在你自己的包中創建你自己的字符串來證明這一點......但是要小心這樣做會要求你顯式地使用java.lang.String或my.package.String,無論是包或類都被導入。
一旦同化的事實,所有的類名是完全合格的,並且該編譯器可以幫助您避免繁瑣的工作,通過進口來解決短期形式完全合格的形式,事情變得更加清晰。
應該那麼明顯,爲什麼:
java命令COM /陽光/測試指揮官
不起作用。 cp選項在類路徑中放置目錄./com/sun/test(相對於當前目錄),但沒有名爲Commander的類...它是com.sun.test.Commander。這意味着兩件事:(a)命令行需要com.sun.test.Commander和(b)爲了解決這個類,類路徑必須包含一個包含「com」的目錄條目,因爲一個名爲xyMyClass的類必須相對於某些類路徑元素,位於x/y中。注:除非您受Sun的僱用,否則您不應將com.sun用作軟件包名稱,因爲域名sun.com屬於Sun。這個約定的存在是爲了避免類包裝和命名衝突。
PPS:有這樣的事情作爲默認的包,這是通過省略包裝聲明「指定」 - 但它應該幾乎從來沒有被使用。我已經找到了一個合法的地方是它是希望能夠做一個自包含「啓動/類加載器」:
java -cp . Launcher com.xxx.yyy.TargetApp
與Launcher.class在當前目錄......而這僅僅是因爲JAR文件在應用程序運行時保持鎖定狀態,而類文件不運行,這意味着Launcher.class可以自我更新,而Launcher.jar不能。
爲什麼不嘗試所有這些? – sfussenegger 2010-02-19 07:40:00
你很幸運。顯然,有些人爲了聲望而回答任何事情;) – sfussenegger 2010-02-19 08:01:59
是的,他必須嘗試找到解決方案。然而,他可能不明白爲什麼他們工作或不... – romaintaz 2010-02-19 08:08:00