【问题标题】:Can two .class files stored under arbitrarily different paths belong to the same package?存储在任意不同路径下的两个 .class 文件可以属于同一个包吗?
【发布时间】:2018-03-21 05:14:13
【问题描述】:

两个 .java 文件 A.javaB.java 都有这一行:

package mypackage

如果我想A.classB.class都属于同一个包mypackage, 我是否需要遵循一些规则来存储A.classB.class

我可以将A.class 存储为/pathnametoA/A.classB.class 存储在/pathnametoB/B.class 下,其中pathnametoApathnametoB 是任意路径名吗?

比如有人写了B.java作为Junit测试文件来测试A.java,它们都属于同一个包mypackage。我以为A.classB.class会存储在同一目录mypackage下,但A.class实际上存储在/commondpath/bin/mypackageB.class/commonpath/test/mypackage下。 A.classB.class可以属于同一个包mypackage吗?

请注意,我在 Ubuntu 的命令行中使用 javacjava

谢谢。


更新:

Java 中的包是否定义为一个目录下的所有 .class 文件?

那么包和目录的路径名是一一对应的吗?

【问题讨论】:

  • 你为什么不试试看会发生什么?
  • 我已经尝试过这个例子。它有效,但我不明白我需要遵循什么规则。
  • A需要写package commondpath.bin.mypackageB需要写common path.test.mypackage,但是两者不在同一个包下,mypackage是不同的,因为它们属于不同的路径
  • 谢谢。 Java 中的包是否定义为一个目录下的所有 .class 文件?

标签: java


【解决方案1】:

两个 .java 文件 A.javaB.java 都有这一行:

package mypackage

如果我想A.classB.class都属于同一个包mypackage

他们已经这样做了。你在源文件里是这么说的。

我是否需要遵循一些规则来存储A.classB.class

您需要将它们都存储在名为mypackage 的目录中。

我可以将A.class 存储为/pathnametoA/A.classB.class 存储在/pathnametoB/B.class 下,其中pathnametoApathnametoB 是任意路径名吗?

除非您满足上述条件,否则不会。他们不会被发现。你会得到ClassNotFoundException

比如有人写了B.java作为Junit测试文件来测试A.java,它们都属于同一个包mypackage。我以为A.classB.class会存储在同一目录mypackage下,但A.class实际上存储在/commondpath/bin/mypackageB.class/commonpath/test/mypackage下。 A.classB.class可以属于同一个包mypackage吗?

是的,如果在 CLASSPATH 中同时提到了 commonpath/bincommonpath/test

Java 中的包是否定义为一个目录下的所有 .class 文件?

不,它定义为所有具有相同package 语句的类。

那么包和目录的路径名是一一对应的吗?

不,按照你的例子。

【讨论】:

    【解决方案2】:

    JVM 使用类加载器加载类。默认的类加载器使用CLASSPATH 和类的全名来查找.class 文件。

    在您的情况下,如果 CLASSPATH 引用 /commondpath/bin/commonpath/test,它将在这两个文件夹中查找文件 mypackage/A.classmypackage/B.class

    CLASSPATH 标识包层次结构的根文件夹。您不能将A.class 存储在名为pathnametoA 的文件夹中。

    好吧,除非您安装自己的类加载器以使用不同的方案查找 .class 文件,否则真的不是一个好主意。

    请参阅“Java 平台,标准版工具参考”第 2 章“设置类路径文档”的“Class Path and Package Names”部分。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多