感谢 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();
}
}
但我不明白为什么我需要这样做?有人可以帮助我理解为什么我需要向上移动一级吗?
最佳答案
因为 Java 中的包映射到目录。
因此,如果您的 samepckp1test
类有一个 p1
目录,如下所示:
p1
-> samepckp1test.java
-> accesslevel.java
然后java希望你在p1
的父目录下编译编译p1
包。 (p1
包包含 samepckp1test
和 accesslevel
类)。
如果您希望您的类位于默认包中(完全没有包声明,我不推荐),您可以从它们的容器目录(而不是示例中的父目录)编译它们。
规则是:类应该在其包声明之后的目录中找到。
也就是说,如果您的类 MyClass
位于 com.stackoverflow.test
包中,则您的类源应位于:
com/stackoverflow/test/MyClass.java
因此您需要位于包含 com
子目录的目录中。
关于java - 为什么在编译同一包的不同文件时向上移动一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286340/