4

我有以下两个源文件

文件世界.java

package planets;

public class World {
    public static void main(String[] args) {
        Mars.land();
    }
}

文件月亮.java

package planets;

public class Moon {
    public static void land() {
        System.out.println("Hello Moon");
    }
}

class Mars {
    public static void land() {
        System.out.println("Hello Mars");
    }
}

正如我们所见,它Moon.java包含两个类:公共Moon类和非公共Mars类。

文件位于planets目录内,下面显示了目录树

+current-dir:
+----+planets:
      +----+World.java
      +----+Moon.java

现在,如果我尝试从 Windows 命令提示符(我在current-dir文件夹中)编译

javac planets\World.java

我收到此错误消息:

planets\World.java:5: error: cannot find symbol
       Mars.land();
       ^
  symbol:   variable Mars
  location: class World
1 error

这很奇怪,因为我知道编译器会在当前包的所有源文件中搜索非公共类。还有 Cay Horstmann 的核心 Java 第 1 卷,第 10 版。在第 192-193 页上说:

[...]您可以从当前包中导入非公共类。这些类可以在具有不同名称的源文件中定义。如果从当前包中导入一个类,编译器会搜索当前包的所有源文件以查看哪个源文件定义了该类。

此外,我尝试使用 Eclipse Oxygen 编写这些文件,并且编译没有问题。但我知道 Eclipse 使用不同的编译器。

为什么javac编译器会失败?

编辑:我没有设置CLASSPATH变量。因此,默认情况下编译器会在当前目录中查找。

4

1 回答 1

0

您需要按顺序键入以下命令(在“当前目录”中)

  1. javac 行星\Moon.java
  2. 爪哇-cp。行星\World.java
  3. 爪哇-cp。行星.世界
于 2017-07-30T21:16:55.720 回答