gpt4 book ai didi

使用 import 语句进行 java 类路径相关查询

转载 作者:行者123 更新时间:2023-11-30 05:07:14 25 4
gpt4 key购买 nike

下面我的程序名为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 语句。

问题是这样的:

  • 尝试编译这两个文件。如果你想使用Apple类,那么 确保将 Fruit.class 文件放在 food 子目录中。
  • <小时/>

    编辑#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

    最佳答案

    因为您还没有为此指定食品包装。让它像这样就可以了

    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

    关于使用 import 语句进行 java 类路径相关查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661190/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com