package语句和.java文件目录之间的关系?

时间:2015-06-22 16:22:50

标签: java package

考虑包层次结构文件夹1 / 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没有编译。

因为两者都应该在同一位置生成类文件。因此,他们应该能够在没有进口声明的情况下找到对方。

但是仍然没有找到B级。

任何人都建议采取措施......或者出了什么问题......

2 个答案:

答案 0 :(得分:1)

  

考虑包层次结构文件夹1 / hi。 folder1包含B.java和   嗨包含A.java。

因此B.java位于folder1A.java位于名为hi的文件夹中。到目前为止一切都很好。

B.java看起来像这样:

package hi.a12.pkg;
public class B { } 

糟糕。 B.java表示它位于名为package的{​​{1}}中,但它在磁盘上的物理位置为hi.a12.pkg。这就是问题所在。将您的文件放在folder1语句指示的文件夹中,否则其他类将无法找到它们。

理解这个概念并解决问题的快速方法是:

  1. package中的package语句更改为B.java
  2. package folder1;中的package语句更改为A.java
  3. package folder1.hi;声明之后import中{li> B A.java package
  4. import folder.B;上方的B.java目录中的folder1编译为javac folder1\B.java
  5. A.java上方的folder1目录中的javac folder1\hi\A.java编译为}
  6. 您可以在Oracle documentation

    中阅读所有相关信息

答案 1 :(得分:-1)

有几个问题。

首先,看起来您的包被命名为错误的方式。尝试

表示A.java(应该在...... / pkg / a12目录中):

package pkg.a12;

表示B.java(必须在... / pkg / a12 / hi目录中):

package pkg.a12.hi;

其次,您的文件A.java需要使用import语句说出B所在的位置:

package pkg.a12;
import pkg.a12.hi.B;
public class A {B b; }

第三,编译A时,你必须在pkg以上的文件夹中,并参考A的完整路径:

javac pkg/a12/A.java

这也将编译B.java