感谢stackoverflow我终于明白当我试图编译一个文件时,我需要从源目录编译,该文件有一个在其方法之一中声明的同一个包的另一个类的对象。前 -
package p1;
public class accesslevel
{
int n=2;
private int pri_n=3;
protected int pro_n=4;
public int pub_n=5;
public accesslevel()
{
System.out.print("\nin accesslevel constructor");
System.out.print("\nn="+n);
System.out.print("\nprivate n="+pri_n);
System.out.print("\nprotected n="+pro_n);
System.out.print("\npublic n="+pub_n);
}
}
package p1;
class samepckp1test
{
public static void main(String args[])
{
accesslevel a=new accesslevel();
}
}
但我不知道为什么我需要这样做?有人可以帮助我理解为什么我需要提升一级吗?
答案 0 :(得分:0)
因为Java中的包映射到目录。
因此,如果您的p1
类有samepckp1test
目录,请执行以下操作:
p1
-> samepckp1test.java
-> accesslevel.java
然后java希望你在p1
的父目录上编译以编译p1
包。 (p1
包中包含samepckp1test
和accesslevel
类。
如果你希望你的类在默认包中(根本不是我不建议的包声明),你可以从它们的容器目录(而不是你的例子中的父目录)编译它们。
规则是:应该在包声明之后的目录中找到类。
也就是说,如果您的班级MyClass
位于com.stackoverflow.test
个套餐中,则您的班级来源可以在以下位置找到:
com/stackoverflow/test/MyClass.java
所以你需要在包含com
子目录的目录中。