为什么在编译同一个包的不同文件时向上移动一个级别

时间:2012-02-15 00:34:10

标签: java

感谢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();
    }
}  

但我不知道为什么我需要这样做?有人可以帮助我理解为什么我需要提升一级吗?

1 个答案:

答案 0 :(得分:0)

因为Java中的包映射到目录。

因此,如果您的p1类有samepckp1test目录,请执行以下操作:

p1
   -> samepckp1test.java
   -> accesslevel.java

然后java希望你在p1的父目录上编译以编译p1包。 (p1包中包含samepckp1testaccesslevel类。

如果你希望你的类在默认包中(根本不是我不建议的包声明),你可以从它们的容器目录(而不是你的例子中的父目录)编译它们。

规则是:应该在包声明之后的目录中找到类。

也就是说,如果您的班级MyClass位于com.stackoverflow.test个套餐中,则您的班级来源可以在以下位置找到:

com/stackoverflow/test/MyClass.java

所以你需要在包含com子目录的目录中。