2013-07-07 41 views
0

我想編譯並運行簡單的Java程序。這個程序基本上打印出你好世界短語。我沒有指定-cp選項,我沒有CLASSPATH環境變量。因此,用戶類路徑僅限於當前目錄。默認classpath當前目錄異常

現在,編譯工作很好。

[email protected]:~/temp/bird_test$ javac Sparrow.java 

該命令產生需要的.class文件。當我嘗試運行.class文件時會發生奇怪的事情。以下命令行得通。

[email protected]:~/temp/bird_test$ java Sparrow 

但是,當我嘗試使用以下命令

[email protected]:~/temp/bird_test$ java ./Sparrow 

我收到以下錯誤:

Error: Could not find or load main class ..Sparrow 

WTF!我認爲符號./指的是當前目錄。

回答

2

java以類名作爲參數。它不需要文件路徑。類名(Sparrow)然後由java類加載器根據類路徑解析爲.class文件,即它在類路徑中列出的每個目錄和jar中查找Sparrow.class文件。

讓我們尊重的良好做法,因此不使用默認的程序包的示例:

package foo.bar; 

public class Baz { 
    ... 
} 

上述類的類名是foo.bar.Baz。要執行它,你必須使用

java foo.bar.Baz 

和Java將尋找一個foo/bar/Baz.class在類路徑中列出的所有目錄。因此,如果類路徑設置爲/hello/world,它將查找文件/hello/world/foo/bar/Baz.class

+0

Thx dude!你真的清除了一些重大的困惑 –