2009-07-02 151 views
1
C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>javac Welcome.java 

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>java Welcome.class 
Exception in thread "main" java.lang.NoClassDefFoundError: Welcome/class 
Caused by: java.lang.ClassNotFoundException: Welcome.class 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClassInternal(Unknown Source) 

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\Welcome>java Welcome 
Welcome to Core Java 
by Cay Horstmann 
and Gary Cornell 

所以我的問題是,「java」如何找到並執行一個類?爲什麼不能直接指定類文件?java命令行執行

回答

2

如果您添加.class java認爲您正在查找包「Welcome」中名爲「class」的類。因爲沒有你會得到一個錯誤。

1

傳遞給java.exe的參數是類名(帶有可選包),而不是文件名。

問候。

2

'點'是一個分隔符。當您編寫Welcome.class時,它正在尋找名爲'class'的'Welcome'包中的類。

1

它將文件名中的點解釋爲包名稱。隨着您對java的瞭解提高,您將瞭解包,並發現通常您的類文件位於包中,例如,如果Welcome類位於包「com.ericasberry」中,則可以通過鍵入java com.ericasberry.Welcome

2

java程序需要一個類名作爲參數,而不是文件名。作爲Java手冊規定:(java

的java [選項]類[參數...]

一旦這是關於classpath清晰讀取。

-2

首先你需要給javac file_name.java編譯後編譯java程序,它會生成點(。)類文件,所以你不能直接給這個類文件編譯程序。

+1

-1。 OP非常清楚地做到了這一點。 – 2013-10-03 13:41:18