用包编译类

时间:2013-05-23 13:13:24

标签: java compilation directory packages

请告诉我如何编译以下目录结构中的类。

默认类路径为 -

/ 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是正确的?

2 个答案:

答案 0 :(得分:0)

我不认为C是正确的。将当前目录设置为test然后调用,然后B类将编译。

答案 1 :(得分:0)

由于类AB属于包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类之后就被幸福地执行了。