两个.java文件A.java
和B.java
都有这一行:
package mypackage
如果我希望A.class
和B.class
都属于同一个包mypackage
,
我是否需要遵循一些规则来存储A.class
和B.class
?
我可以将A.class
存储为/pathnametoA/A.class
而B.class
存储在/pathnametoB/B.class
下,其中pathnametoA
和pathnametoB
是任意路径名吗?
例如,有人将B.java
写为Junit测试文件以测试A.java
,并且它们都属于同一个包mypackage
。我认为A.class
和B.class
将存储在同一目录mypackage
下,但A.class
实际存储在/commondpath/bin/mypackage
和B.class
下/commonpath/test/mypackage
下1}}。 A.class
和B.class
可以属于同一个包mypackage
吗?
请注意,我在Ubuntu的命令行中使用javac
和java
。
感谢。
更新
Java中的包是否定义为目录下的所有.class文件?
所以包和目录的路径名之间有一对一的对应关系吗?
答案 0 :(得分:3)
两个.java文件
A.java
和B.java
都有这一行:
package mypackage
如果我希望
A.class
和B.class
都属于同一个包mypackage
,
他们已经做到了。你在源文件中这么说。
我是否需要遵循一些规则来存储
A.class
和B.class
?
您需要将它们存储在名为mypackage
的目录中。
我可以将
A.class
存储为/pathnametoA/A.class
而B.class
存储在/pathnametoB/B.class
下,其中pathnametoA
和pathnametoB
是任意路径名吗?
除非您满足上述条件。他们不会被发现。您将获得ClassNotFoundException
。
例如,有人将
B.java
写为Junit测试文件以测试A.java
,并且它们都属于同一个包mypackage
。我认为A.class
和B.class
将存储在同一目录mypackage
下,但A.class
实际存储在/commondpath/bin/mypackage
和B.class
下/commonpath/test/mypackage
下1}}。A.class
和B.class
可以属于同一个包mypackage
吗?
是的,如果CLASSPATH中提到了commonpath/bin
和commonpath/test
。
Java中的包是否定义为目录下的所有.class文件?
不,它被定义为具有相同package
语句的所有类。
所以包和目录的路径名之间有一对一的对应关系吗?
不,按照你的例子。
答案 1 :(得分:1)
JVM使用类加载器加载类。默认的类加载器使用CLASSPATH
和类的全名来查找.class
文件。
在您的情况下,如果CLASSPATH
同时引用/commondpath/bin
和/commonpath/test
,则会在这两个文件夹中查找文件mypackage/A.class
和mypackage/B.class
。< / p>
CLASSPATH
标识包层次结构的根文件夹。您无法将A.class
存储在名为pathnametoA
的文件夹中。
好吧,除非您安装自己的类加载器以使用不同的方案查找.class
文件,并且真的不是一个好主意。
参见&#34; Class Path and Package Names&#34;第2章&#34;设置类路径文件&#34; &#34; Java平台,标准版工具参考&#34;。