-2
package pkg1;
    public class demoFile1 {

            private int maze = 5;
            public demoFile1() {}
            public demoFile1 (int maze) {

                    this.maze = maze;
                    System.out.println(this.maze);

            }
    }

package pkg2;
import pkg1.*;
    public class demoFile2 {
            public static void main (String[] args) {

                    demoFile1 obj = new demoFile1 (10);

            }
    }

在这里,我创建了两个包pkg1pkg2. 在pkg1中,有一个类和另一个类,pkg2其中导入pkg1以初始化前一个类,因此它需要导入.classfrom pkg1,这在尝试从此子目录中调用时会产生错误:

error: package pkg1 does not exist

请注意,当pkg1.demoFile1.class文件是demoFile2.class从该子目录外部(不同级别,没有限制在 下pkg2)导入时,程序工作得很好,但是,当这两个包都在同一级别时,每个包都有源代码文件和.class文件,即,pkg2.demoFile2.class尝试导入时pkg1.demoFile1.class

编辑#1:文件夹结构: 点击这里

我的感觉是,在.class从包中创建或导入文件时,分层排序/优先级可能存在一些问题,或者整体定义写错了。请帮忙。

4

1 回答 1

0

很可能你有一个类路径问题。类文件应放置在与 java 包声明匹配的文件夹中。文件夹结构的根目录可能从您的类路径中存在的每个文件夹/ja​​r 开始(编辑:您的文件夹结构是正确的)。

如果你跑

java pkg2.demoFile2

默认情况下,使用“当前目录”类路径(当前目录称为“.”)。所以 demoFile2.class 必须在 pkg2 文件夹内,而 demoFile1.class 在 pkg2.class 文件夹内,您必须从包含这两个包文件夹的文件夹中执行 java 程序

此文件夹结构通常由 java 编辑器处理。所以我想你正在从命令行运行“javac”。在这种情况下,指定一个输出文件夹,以便它可以在那里创建所需的文件夹结构:

javac -d . file1.java file2.java

如果你想一次编译一个文件,你需要告诉 javac 在哪里可以找到以前编译的类,再次使用类路径(再次从根文件夹运行):

javac -d . -cp . file2.java

您可以从您想要正确指定类路径的任何文件夹(作为绝对或相对路径)中执行所有这些操作。从根文件夹运行所有命令是最简单的选择。

在 java 中,类加载或我现在能想到的任何其他上下文中都没有排序/优先级问题。

于 2017-05-14T12:00:40.553 回答