请告诉我如何编译以下目录结构中的类。
默认类路径为 -
/ foo
这是目录结构 -
foo
|
test
|
xcom
|--A.class
|--B.java
这是两个文件 -
package xcom;
public class A{}
package xcom;
public class B extends A{}
哪个允许B.java编译?
一个。将当前目录设置为xcom,然后调用
javac B.java
B中。将当前目录设置为xcom,然后调用
javac -classpath。 B.java
℃。将当前目录设置为test然后调用
javac -classpath。 xcom / B.java
现在我的查询是 -
为什么B和B是错的,C是正确的?
答案 0 :(得分:0)
我不认为C是正确的。将当前目录设置为test然后调用,然后B类将编译。
答案 1 :(得分:0)
由于类A
和B
属于包xcom
(请参阅文件顶部的package xcom;
),java编译器希望在文件夹名称中找到它们“xcom”,它希望在类路径中找到该文件夹(实际上在源路径中,未指定时与类路径相同)。
您可以在 docs 。
中找到更详细的信息 为什么第一个回答错了?
A. Set current directory to xcom then invoke: javac B.java
javac期望类路径中的文件夹“xcom”(当前设置为“/ foo”)。但是没有这样的文件夹,因此无法找到类B
。
为什么第12个回答错了?
B. Set current directory to xcom then invoke: javac -classpath . B.java
指定-classpath .
将当前目录(即“xcom”)指定为类路径。 javac期望类路径中的文件夹“xcom”(当前设置为“/ foo / test / xcom”)。但是没有这样的文件夹,因此无法找到类B
。
为什么第3个答案是正确的?
C. Set current directory to test then invoke: javac -classpath . xcom/B.java
指定-classpath .
将当前目录(即“test”)指定为类路径。 javac期望类路径中的文件夹“xcom”(当前设置为“/ foo / test”),它确实找到了这样一个文件夹。然后javac期望B类的源文件位于那个“xcom”文件夹中,实际上它找到了它,然后编译它,并且B类之后就被幸福地执行了。