作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有三个 .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
文件预编译中进行任何更改。
最佳答案
当你编译 A
时,它有一个对 B
的引用,所以它也必须编译它。 A
不知道 C
所以它不会编译它。
我建议您使用 IDE 或诸如 maven
之类的构建工具,因为您将获得更复杂的项目,这将成为试图跟踪哪些文件需要重新编译的噩梦当您更改文件时。
关于java - 在Java中编译类文件一直令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127893/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!