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

标签 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();
    }
}  

但我不明白为什么我需要这样做?有人可以帮助我理解为什么我需要向上移动一级吗?

最佳答案

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

因此,如果您的 samepckp1test 类有一个 p1 目录,如下所示:

p1
   -> samepckp1test.java
   -> accesslevel.java

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

如果您希望您的类位于默认包中(完全没有包声明,我不推荐),您可以从它们的容器目录(而不是示例中的父目录)编译它们。

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

也就是说,如果您的类 MyClass 位于 com.stackoverflow.test 包中,则您的类源应位于:

com/stackoverflow/test/MyClass.java

因此您需要位于包含 com 子目录的目录中。

关于java - 为什么在编译同一包的不同文件时向上移动一级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9286340/

相关文章:

java - 整数作为字符串而不是整数执行?

java - 在 Java 中实现 GridBagLayout 的问题

Java移动鼠标

java - HK2 相当于 Guice 中的 @Provides for Jersey 2

java - JQuery验证引擎: Validate with Ajax call

java - 网 bean 8.02 : An Instance of the program already running

java - 通过单击按钮创建 Imagebutton 的新实例

java - BouncyCaSTLe PGP 和 McAfee eBusiness Server 8.6 不兼容

java - 推荐的开源java邮件列表软件

java - 将项目从不同的类添加到 JComboBox