Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用包编译类_Java_Compilation_Directory_Packages - Fatal编程技术网

Java 用包编译类

Java 用包编译类,java,compilation,directory,packages,Java,Compilation,Directory,Packages,请告诉我下面目录结构中的类将如何编译 默认类路径为- /福 这是目录结构- foo | test | xcom |--A.class |--B.java 这是两个文件- package xcom; public class A{} package xcom; public class B extends A{} 哪个允许B.java编译 A.将当前目录设置为xcom,然后调用 javacb.java B.将

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

默认类路径为-

/福

这是目录结构-

foo 

  | 
  test

     | 
     xcom

        |--A.class

        |--B.java 
这是两个文件-

package xcom; 
public class A{} 

package xcom; 
public class B extends A{} 
哪个允许B.java编译

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

javacb.java

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

javac-classpath。B.java

C.将当前目录设置为test,然后调用

javac-classpath。xcom/B.java

现在我的问题是——


为什么A和B是错误的,C是正确的

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

由于类
A
B
属于包
xcom
(请参见文件顶部的
包xcom;
),java编译器希望在名为“xcom”的文件夹中找到它们它希望在类路径中找到该文件夹(实际上在sourcepath中,未指定时与类路径相同)

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

简要说明: 为什么第一个答案错了?
A.将当前目录设置为xcom,然后调用:javac B.java

javac希望类路径中有一个文件夹“xcom”(当前设置为“/foo”)。但是没有这样的文件夹,所以它找不到class
B

为什么第12个答案错了?
B.将当前目录设置为xcom,然后调用:javac-classpath。B.java

指定
-classpath.
将当前目录(即“xcom”)指定为类路径。javac希望类路径中有一个文件夹“xcom”(当前设置为“/foo/test/xcom”)。但是没有这样的文件夹,所以它找不到class
B

为什么第三个答案正确?
C.将当前目录设置为test,然后调用:javac-classpath。xcom/B.java


指定
-classpath.
将当前目录(即“test”)指定为类路径。javac希望在类路径(当前设置为“/foo/test”)中有一个文件夹“xcom”,并且它确实找到了这样一个文件夹。然后,javac希望类B的源文件位于“xcom”文件夹中,并且确实找到了它,并对其进行了编译,然后类B从此被愉快地执行。

您确定C是正确的吗?C应该读取:将当前目录设置为test,然后调用,是的,它是正确的。我错误地键入了xcom。现在更正它。@asha:如果任何答案有助于您解决问题,请将其标记为“已接受”,以便将来遇到类似问题的用户能够轻松发现它。出于同样的原因,如果你自己能找到解决方案,请发布你自己的答案并将其标记为“已接受”。非常感谢你的解释。如果我把类A放在没有包的地方,而类B放在有包的地方,有没有编译的方法,像这样-类A-公共类A{}类B-包xcom;公共类B可能扩展了{},但你到底为什么要这样做呢?重点是什么?此外,不为应用程序使用软件包是一种非常糟糕的做法。