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

哪个类首先编译, Object还是String

ObjecttoString返回类型中需要相同的类, String扩展了Object类。

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

单通道编译器只能使用它已经遇到的符号。 Pascal是一种用于使用单通道编译器的语言示例。 使用单通道编译器实现java是很困难的,如果不是不可能的话。

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

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

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

为了编译任何其他类, javac必须首先访问Object类的一个版本,因为其他类是从该类派生的。 如果javac类路径中没有该类的版本, javac将在编译任何其他类之前(如果它可以找到源代码)“动态”编译Object

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