2011-01-11 56 views
1

我的程序以下稱爲Apple.javaJava類路徑相關的查詢

import food.Fruit; 
class Apple extends Fruit{ 
public static void main(String[] args){ 
    int y=20,z=0; 
    z=y+10; 
    System.out.println("x+y is "+z); 
} 
} 

這是另一個叫Fruit.java程序

package food; 
public abstract class Fruit{ 
    public static void main(String[] args){ 
    int x=10; 
    System.out.println("x is "+x); 
    } 
} 

這兩個程序都存儲在下面的目錄路徑: - G:\ Java \ food 我確實使用以下命令編譯了這兩個程序: -

G:\>javac Java\food\*.java 

它生成了類文件。 我還是設法使用下面的命令來執行程序水果 -

G:\>java -classpath G:\Java food.Fruit 

然而,當我試圖爲蘋果計劃做同樣的它導致的錯誤消息。

G:\>java -classpath G:\Java food.Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple) 

請問有人能幫我弄清楚錯誤是什麼?我正努力讓自己準備好參加SCJP證書考試,因此我將這個例子引用到由Kathy Sierra和Bert Bates編寫的McGrawHill出版物書籍中。

謝謝!


編輯#2

是的,我確實因爲那是怎樣的代碼是在書中。有沒有一種方法可以繼續執行文件,而無需包含聲明。

這是問題的樣子: -

  1. 試圖編譯兩個文件。如果要使用Apple類,請確保將Fruit.class文件放置在食品子目錄中,即 。

編輯#3

我做了嘗試,並得到了以下錯誤

G:\>java -classpath G:\Java\food Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Fruit 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(Unknown Source) 
    at java.lang.ClassLoader.defineClass(Unknown Source) 
    at java.security.SecureClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.defineClass(Unknown Source) 
    at java.net.URLClassLoader.access$000(Unknown Source) 
    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) 
Caused by: java.lang.ClassNotFoundException: food.Fruit 
    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) 
    ... 12 more 
Could not find the main class: Apple. Program will exit. 

編輯#4

我還是設法執行它,而無需包括聲明 包食物;

G:\>java -classpath G:\Java\food;G:\Java Apple 
x+y is 30 

我改變什麼,我搬到了Apple.class文件到一個單獨的文件夾這是有道理的,因爲該文件夾的「食物」是包的指示和Darvis指出有需要的文件夾中的所有文件包名稱,否則它不會執行。


編輯#5 這工作太

G:\>java -classpath G:\Java Apple 
x+y is 30 
+1

你在你的Apple類中有`package food;`語句嗎? – 2011-01-11 18:28:39

回答

2

,因爲你沒有指定食品包裝爲。使它像這樣,它會工作

package food; 
import food.Fruit; 
class Apple extends Fruit{ 
public static void main(String[] args){ 
    int y=20,z=0; 
    z=y+10; 
    System.out.println("x+y is "+z); 
} 
} 

更新:

當您執行以下

G:\>java -classpath G:\Java food.Apple 
Exception in thread "main" java.lang.NoClassDefFoundError: food/Apple (wrong name: Apple) 

它將在類路徑中添加G:\Java從那裏將比較搜索類蘋果在食物DIR 與包裝名稱指定food

或。如果你不想在類中指定包,那麼

G:\>java -classpath G:\Java\food Apple