编译器编译哪一个第一个Object或String?

时间:2015-03-23 00:27:38

标签: java

首先编译哪个类,ObjectString

Object需要返回类型为toString的同一个类,String扩展Object类。

3 个答案:

答案 0 :(得分:5)

都不是。就像相互依赖的类的任何其他对或循环一样,它们是同时编译的。

答案 1 :(得分:2)

为了编译任何其他类, javac 必须首先访问Object类的版本,因为其他类是从该类派生的。如果 javac 类路径中没有该类的版本,则 javac 将会(如果可以找到源代码)在运行时编译Object“编译任何其他类。

同样的规则适用于正在编译的类的任何其他超类。例如,如果编译SubclassXSuperclassX的子类,而SuperclassX.class不在 javac 类路径中, javac 将需要可以编译Superclass.java。

答案 2 :(得分:1)

实现编译器的方法有很多种。但是,基本方法是解析源并构建符号表。然后使用该符号表将源转换为目标代码。

单通道编译器只能使用已遇到的符号。 Pascal是设计为使用单通道编译器的语言示例。使用单通道编译器实现java即使不是不可能也是困难的。

然而,大多数语言使用multi pass编译器,因为单通道编译器的优势不再重要,在这种情况下使用尚未定义的符号变得微不足道,因为假设它们将在以后遇到在解析阶段。

因此,只要同时编译整个java.lang包,就可以解决交叉依赖性。另一方面,如果你试图单独编译每个类,解析器会抱怨,因为它会到达解析过程的末尾并且有未解析的符号。