我的程序名为Apple.java
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
它生成了类文件。 我确实设法使用以下命令执行Fruit程序: -
G:\>java -classpath G:\Java food.Fruit
但是,当我尝试对Apple程序执行相同操作时,会导致错误消息。
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
是的,我这样做是因为这就是代码在书中的表现。有没有办法我仍然可以执行该文件而无需包含package语句。
这就是问题所在:
编辑#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文件移动到一个单独的文件夹,这是有道理的,因为文件夹“food”是包的指示,并且Darvis指出文件夹中所有文件需要具有包名称,否则它不会执行。
编辑#5 这也很有效。
G:\>java -classpath G:\Java Apple
x+y is 30
答案 0 :(得分: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 中的类apple,其中包名称为food
或者。如果您不想在课程中指定包,那么
G:\>java -classpath G:\Java\food Apple