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);
}
}
在这里,我创建了两个包pkg1
和pkg2
。在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
文件时,层次排序/优先级可能存在一些问题,或者整体定义是错误的。请帮忙。
答案 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中,在类加载或我现在可以想到的任何其他上下文中没有排序/优先级问题。