我正在尝试理解Java包。
我在同一个包中有两个类,A.java和B.java。 A类引用B类。
两者都有包语句package world.example;
,并保存在目录.../world/example/
中。
B编译正常,但在尝试编译A时,javac无法找到B的类文件。
我尝试从/world
的父级以及/example
的父级运行javac。我在这里和其他地方都搜索过很多答案,但都无济于事。关于类似主题的大多数问题似乎都有很多无关的代码和信息,所以我试图将我的问题提炼到骨子里,但仍然无法看到我所缺少的内容。
附录:如果删除package语句,只要在编译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
答案 0 :(得分:0)
I have two classes, A.java and B.java, in the same package. Class A references class B
您必须采用实用的分离方法将.java文件与.class文件分开。
与我重复整个编译过程。
首先,在CMD中编译.java文件时使用此命令,以便将.java文件与.class文件分开,以避免混淆。
javac -d Target_Location Filename.java >>>> Spaces are important
Target_location = C:\ blah \ blah<<你希望你的包/类目录在哪里。
编译完成后,您将在之前选择的Target_Location上获取您的类文件。因此,现在您必须将类路径环境变量更改为该目标位置,因为您已提供第三方软件包。
执行并查看。
如何在CMD中设置类路径。
set classpath = c:\blah\blah;