我有以下两个源文件
File World.java
package planets;
public class World {
public static void main(String[] args) {
Mars.land();
}
}
File Moon.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的 Core Java Vol 1,第10版。第192-193页说:
[...]您可以从当前包导入非公共类。这些 可以在具有不同名称的源文件中定义类。如果你 从当前包导入一个类,编译器搜索所有 当前包的源文件,以查看哪个定义了 类。
此外,我尝试使用Eclipse Oxygen编写这些文件,并且编译没有问题。但我知道Eclipse使用不同的编译器。
为什么javac
编译器失败?
编辑:我没有设置CLASSPATH
变量。所以默认情况下编译器会在当前目录中查找。
答案 0 :(得分:0)
您需要按顺序键入以下命令(在'current-dir'中)