存储在任意不同路径下的两个.class文件是否属于同一个包?

时间:2017-10-09 22:23:48

标签: java

两个.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下1}}。 A.classB.class可以属于同一个包mypackage吗?

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

感谢。

更新

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

所以包和目录的路径名之间有一对一的对应关系吗?

2 个答案:

答案 0 :(得分:3)

  

两个.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下1}}。 A.classB.class可以属于同一个包mypackage吗?

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

  

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

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

  

所以包和目录的路径名之间有一对一的对应关系吗?

不,按照你的例子。

答案 1 :(得分:1)

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

在您的情况下,如果CLASSPATH同时引用/commondpath/bin/commonpath/test,则会在这两个文件夹中查找文件mypackage/A.classmypackage/B.class。< / p>

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

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

参见&#34; Class Path and Package Names&#34;第2章&#34;设置类路径文件&#34; &#34; Java平台,标准版工具参考&#34;。