无法从用户定义的包中导入类

时间:2017-05-14 11:08:39

标签: java packages java-package

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以初始化前一个类,因此它需要从{{1}导入.class当尝试从此子目录中调用时,这会产生错误:

pkg1

请注意,error: package pkg1 does not exist文件是由pkg1.demoFile1.class从该子目录之外导入的demoFile2.class文件(不同级别,不限于pkg2下),但是,当不是这两个包都在同一级别,每个包都有源代码文件和.class个文件,即pkg2.demoFile2.class尝试导入时pkg1.demoFile1.class

编辑#1:文件夹结构: click here

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

1 个答案:

答案 0 :(得分:0)

您很可能遇到classpath问题。类文件应放在与java包声明匹配的文件夹中。文件夹结构的根目录可以从类路径中的每个文件夹/ jar开始(编辑:您的文件夹结构是正确的)。

如果你跑

java pkg2.demoFile2

默认为"当前目录"使用classpath(当前目录名为"。")。因此,demoFile2.class必须位于pkg2文件夹内的pkg2文件夹和demoFile1.class中,并且必须从包含两个包文件夹的文件夹中执行java程序。

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

javac -d . file1.java file2.java

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

javac -d . -cp . file2.java

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

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