【发布时间】:2017-05-20 14:07:15
【问题描述】:
我正在尝试理解 Java 包。
我在同一个包中有两个类,A.java 和 B.java。 A 类引用 B 类。
两者都有包语句package world.example;并保存在目录.../world/example/中。
B 编译正常,但是在尝试编译 A 时,javac 找不到 B 的类文件。
我尝试从/world 的父级以及/example 运行javac。我在这里和其他地方搜索了很多答案,但无济于事。大多数类似主题的问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼到最简单的部分,但仍然看不到我遗漏了什么。
附录:如果我删除包语句,两个类都可以编译,前提是我在编译 A 时指定了类路径,因此:javac -classpath . A.java。
代码如下:
package world.example;
public class A {
public static void main(String[] args) {
String msg = B.getMessage();
System.out.println(msg);
}
}
...和...
package world.example;
public class B {
protected static String getMessage() {
return "Hello world!";
}
}
...以及 javac 的输出...
17-04-17◆23:03 example »javac B.java
17-04-17◆23:04 example »javac A.java
A.java:5: error: cannot find symbol
String msg = B.getMessage();
^
symbol: variable B
location: class A
1 error
17-04-17◆23:04 example »javac -classpath . A.java
A.java:5: error: cannot find symbol
String msg = B.getMessage();
^
symbol: variable B
location: class A
1 error
【问题讨论】:
-
从包含子目录“word”的目录编译它们。 IE。 javac word/example/A.java
-
如果您转到
world的父级并输入javac world/example/*.java会发生什么?