我有三个.java
个文件,A.java
,B.java
和C.java
A.java
:
public class A {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.display();
b.display();
}
public void display() {
System.out.println("In A");
}
}
B.java
:
public class B {
public void display() {
System.out.println("In B");
C c = new C();
c.display();
}
}
C.java
:
public class C {
public void display() {
System.out.println("In C");
}
}
程序运行正常。我编译为:
javac A.java
这会生成A.class
,B.class
和C.class
个文件。
然后将其作为:
运行java A
它的输出:
In A
In B
In C
现在问题在这里:
当我删除A.class
和C.class
以及不 B.java
并重新编译A.java
时:
javac A.java
这仅生成A.class
。
B.class
已经存在,因为未删除
但为什么这次没有生成C.class
?
注意:C.class
与B.class
和A.class
一起被删除时生成C.class
。或者,如果我在B.java
文件预编译中进行了任何更改。
答案 0 :(得分:2)
编译A
时,它引用了B
,所以它也必须编译它。 A
不了解C
因此无法编译。
我建议您使用IDE或maven
之类的构建工具,因为您将获得更复杂的项目,这将成为一个噩梦,试图跟踪更改时需要重新编译的文件一个文件。
答案 1 :(得分:1)
因为C类不是在A类中使用而是在B类中使用。由于您没有删除B类,因此编译器仅生成A类。 一个类不依赖于C类,因此不会编译C类。