Моя нижеприведенная программа называется 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, и поэтому я ссылаюсь на этот пример в книге изданий McGrawHill, написанной Кэти Сьерра и Берт Бейтс.
Правка # 2
Да, я сделал, потому что так было в книге.Есть ли способ, которым я все еще мог бы выполнить файл, не включая оператор пакета.
Вот как выглядит вопрос:
Попытка скомпилировать два файла.Если вы хотите использовать класс Apple, убедитесь, что вы поместили файл Fruit.class в подкаталог food.
Edit # 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» указывает на пакет, а Дарвис указал все файлы в папке, которые должны иметь имя пакета, иначе он не будет выполняться.
Редактировать # 5 Это тоже сработало
G:\>java -classpath G:\Java Apple
x+y is 30