gpt4 book ai didi

java - 在 Java 中运行构造函数代码之前字段是否已初始化?

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:06 24 4
gpt4 key购买 nike

谁能解释一下以下程序的输出?我认为构造函数是在实例变量之前初始化的。所以我期望输出是“XZYY”。

class X {
Y b = new Y();

X() {
System.out.print("X");
}
}

class Y {
Y() {
System.out.print("Y");
}
}

public class Z extends X {
Y y = new Y();

Z() {
System.out.print("Z");
}

public static void main(String[] args) {
new Z();
}
}

最佳答案

正确的初始化顺序是:

  1. 静态变量初始化程序和静态初始化 block ,按文本顺序排列(如果类之前尚未初始化)。
  2. 构造函数中的 super() 调用,无论是显式还是隐式。
  3. 实例变量初始化程序和实例初始化 block ,按文本顺序排列。
  4. super() 之后构造函数的剩余主体。

参见章节§2.17.5-6 of the Java Virtual Machine Specification .

关于java - 在 Java 中运行构造函数代码之前字段是否已初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45544160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com