1
New
| -- test
    | -- Second.java
    | -- Second.class

| -- com
    | -- mypack
        | -- First.java

| -- classes
    | -- expecting First.class HERE

//Second Class
public class Second{}

//First Class
package com.mypack; // Problem HERE 

public class First{
        public static void main(String args[]){ new Second() };
    }

案例 1:在 First class 中注释的 package 语句

C:\Anshul\New\com\package>javac -cp ..\..\test First.java
C:\Anshul\New\com\package>java -cp ..\..\test;. First
Second@19821f
-------------------------------------------------------------------------------------

案例 2:头等舱中未注释的包语句

C:\Anshul\New\com\mypack>javac -cp ..\..\test -d ..\..\classes First.java
First.java:7: cannot find symbol
symbol  : class Second
location: class com.mypack.First
                System.out.print(new Second());
                                         ^
1 error
---------------------------------------------------------------------------------   

案例 1 运行良好。但是当我在 First 类中包含 package 语句并尝试编译它时会出错。

4

3 回答 3

0

像这样移动你的文件。

com
  |
  - mypack
       |
       - Second.java
       - Second.class
       - First.java
       - First.class

现在也添加一个package语句Second.java

package com.mypack;

现在将它们编译为

javac com/mypack/First.java com/mypack/Second.java

像这样运行它

java com.mypack.First
于 2013-09-05T15:55:23.343 回答
0

正如您所说, Second.Java 不在任何包下,所以它在默认包下。以下是正在发生的事情的详细信息:

从 First.java 中删除 package 语句

由于这个原因,First.class 也进入了默认包,它能够在同一个包中找到 Secon.class;因此工作正常。

将包语句添加到 First.java。

因此 First.class 进入 com.mypack 包;但 Second.class 仍保留在默认包中。因此现在 First.java 无法编译,因为 Second.class 是Not VisibleFirst.java 代码。

为了解决这个问题,您必须在 First.java 中显式地导入 Second 类。并且根据 Java 约定,不应在默认包中创建类。

于 2013-09-05T16:01:08.133 回答
-1

您正在访问没有 Second.java 的 com.mypack 包中的 First.java,Java 编译器无法找到该类。所以你必须使用

   import test.Second;

在 com.mypack 包中的 First.java 开头。

于 2013-09-05T15:52:22.540 回答