0

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

默认类路径是-

/foo

这是目录结构-

foo 

  | 
  test

     | 
     xcom

        |--A.class

        |--B.java 

这是两个文件-

package xcom; 
public class A{} 

package xcom; 
public class B extends A{} 

哪个允许 B.java 编译?

A. 将当前目录设置为 xcom 然后调用

javac B.java

B. 将当前目录设置为 xcom 然后调用

javac -类路径。B.java

C. 设置当前目录进行测试然后调用

javac -类路径。xcom/B.java

现在我的查询是-

为什么A和B是错的,C是对的?

4

2 回答 2

0

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

于 2013-05-23T13:18:37.110 回答
0

由于类AB属于包xcom(参见package xcom;文件顶部),java 编译器希望在名为“xcom”的文件夹中找到它们,并希望在类路径中找到该文件夹​​(实际上是在源路径中,当未指定时与类路径相同)。

您可以在文档中找到更详细的信息。

简短说明:

为什么第一个答案是错误的?
A. Set current directory to xcom then invoke: javac B.java
javac 期望类路径中有一个文件夹“xcom”(当前设置为“/foo”)。但是没有这样的文件夹,所以找不到 class B

为什么第 12 个答案是错误的?
B. Set current directory to xcom then invoke: javac -classpath . B.java
指定-classpath .将当前目录(即“xcom”)指定为类路径。javac 期望类路径中有一个文件夹“xcom”(当前设置为“/foo/test/xcom”)。但是没有这样的文件夹,所以找不到 class B

为什么第三个答案是正确的?
C. Set current directory to test then invoke: javac -classpath . xcom/B.java
指定-classpath .将当前目录(即“test”)指定为类路径。javac 期望类路径中有一个文件夹“xcom”(当前设置为“/foo/test”),它确实找到了这样一个文件夹。然后 javac 期望类 B 的源文件在那个“xcom”文件夹中,它确实找到了它,并编译它,然后类 B 就被愉快地执行了。

于 2013-05-23T13:36:59.383 回答