Java 中字段和构造函数代码的初始化顺序
Java 程序中,字段初始化和构造函数代码执行的顺序可以令人困惑,尤其是关于两者之间的优先级。然而,Java 虚拟机规范概述了确定正确顺序的清晰事件顺序:
-
静态变量和块: 首先,静态变量和静态初始化块在文本顺序,前提是它们的类之前尚未初始化。
-
超级构造函数调用:接下来,在构造函数中显式或隐式执行 super() 调用。此调用调用父类的构造函数。
-
字段初始化和块:在 super() 调用之后,实例变量以及任何关联的实例初始化块将按文本顺序初始化。
-
构造函数主体:最后,构造函数的剩余主体在 super() 调用之后执行已完成。
在提供的代码片段中,由于指定的初始化顺序而生成输出“YZXZ”。让我们一步步分解:
- 代码中不存在静态初始化器和静态变量。
- 执行构造函数调用 Z(),调用 Z 的超类构造函数 X( ) 隐式执行。
- 执行超类构造函数 X(),将“X”打印到
- Z 类中的实例变量 y 被初始化,打印“Y”到控制台。
- X 类中的实例变量 b 被初始化,打印“Z”到控制台console(因为 Z 是当前子类)。
因此,输出“YZXZ”正确反映了 Java Virtual 定义的初始化和执行顺序机器规格。
以上是Java 中字段和构造函数的确切初始化顺序是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!