包语句与 .java 文件目录之间的关系?
Relationship between a package statement and the directory of a .java file?
考虑包层次结构 folder1/hi。 folder1 包含 B.java 并且 hi 包含 A.java.
B.java:
package hi.a12.pkg;
public class B { }
A.java:
package a12.pkg;
public class A {B b; }
现在 B.java 编译成功,但是 A.java 没有。
因为两者都应在同一位置生成 class 文件。因此,他们应该能够在没有导入语句的情况下找到彼此。
但它仍然说 class B 未找到。
有人建议采取措施......或者出了什么问题......
Consider a package hierarchy folder1/hi. folder1 contains B.java and
hi contains A.java.
所以 B.java
在 folder1
中,A.java
在名为 hi
的文件夹中。到目前为止一切顺利。
B.java
看起来像这样:
package hi.a12.pkg;
public class B { }
糟糕。 B.java
表示它位于名为 hi.a12.pkg
的 package
中,但它在磁盘上的物理位置是 folder1
。这就是问题所在。将您的文件放在 package
语句指定的文件夹中,否则其他 类 将无法找到它们。
理解概念和解决问题的快速方法是:
- 将
B.java
中的package
语句改为package folder1;
。
- 将
A.java
中的package
语句改为package folder1.hi;
import
B
in A.java
在 package
语句之后作为 import folder.B;
- 从
folder1
上面的一个目录编译 B.java
为 javac folder1\B.java
- 从
folder1
上面的一个目录编译 A.java
为 javac folder1\hi\A.java
您可以在 Oracle documentation
中阅读所有相关信息
有几个问题。
首先,您的包的命名方式似乎有误。尝试
for A.java(应该在目录中..../pkg/a12):
package pkg.a12;
for B.java(必须在目录中.../pkg/a12/hi):
package pkg.a12.hi;
其次,您的文件 A.java 需要使用导入语句说明 B 所在的位置:
package pkg.a12;
import pkg.a12.hi.B;
public class A {B b; }
三、编译A的时候一定要在pkg上面的文件夹,参考A的完整路径:
javac pkg/a12/A.java
这也会编译B.java
考虑包层次结构 folder1/hi。 folder1 包含 B.java 并且 hi 包含 A.java.
B.java:
package hi.a12.pkg;
public class B { }
A.java:
package a12.pkg;
public class A {B b; }
现在 B.java 编译成功,但是 A.java 没有。
因为两者都应在同一位置生成 class 文件。因此,他们应该能够在没有导入语句的情况下找到彼此。
但它仍然说 class B 未找到。
有人建议采取措施......或者出了什么问题......
Consider a package hierarchy folder1/hi. folder1 contains B.java and hi contains A.java.
所以 B.java
在 folder1
中,A.java
在名为 hi
的文件夹中。到目前为止一切顺利。
B.java
看起来像这样:
package hi.a12.pkg;
public class B { }
糟糕。 B.java
表示它位于名为 hi.a12.pkg
的 package
中,但它在磁盘上的物理位置是 folder1
。这就是问题所在。将您的文件放在 package
语句指定的文件夹中,否则其他 类 将无法找到它们。
理解概念和解决问题的快速方法是:
- 将
B.java
中的package
语句改为package folder1;
。 - 将
A.java
中的package
语句改为package folder1.hi;
import
B
inA.java
在package
语句之后作为import folder.B;
- 从
folder1
上面的一个目录编译B.java
为javac folder1\B.java
- 从
folder1
上面的一个目录编译A.java
为javac folder1\hi\A.java
您可以在 Oracle documentation
中阅读所有相关信息有几个问题。
首先,您的包的命名方式似乎有误。尝试
for A.java(应该在目录中..../pkg/a12):
package pkg.a12;
for B.java(必须在目录中.../pkg/a12/hi):
package pkg.a12.hi;
其次,您的文件 A.java 需要使用导入语句说明 B 所在的位置:
package pkg.a12;
import pkg.a12.hi.B;
public class A {B b; }
三、编译A的时候一定要在pkg上面的文件夹,参考A的完整路径:
javac pkg/a12/A.java
这也会编译B.java