带有静态成员的java初始化顺序

时间:2012-04-18 16:05:35

标签: java virtual-machine

我不确定我的头脑中是否有正确的Java初始化机制模型。每节课都遵循以下内容:

  1. 初始化超类,如果存在一个
  2. 自己初始化
  3. 初始化遵循以下内容:

    1. 初始化静态和实例变量,其值设置在初始化程序之外。
    2. 运行静态初始化块
    3. 运行构造函数块
    4. 这是否准确/正确?

2 个答案:

答案 0 :(得分:1)

根据Java language specification,您的假设或多或少是正确的。例外是:

  1. 实例变量在初始化类后构造类(与构造函数一起)时运行,
  2. 在尝试加载超类之前加载带有编译时常量表达式的最终静态变量,
  3. 静态初始化块与静态变量一起作为一个块运行,按它们在代码中出现的顺序运行。

答案 1 :(得分:1)

代码执行如下 -

静态初始化块在首次加载类时运行一次。

静态变量

所有超级建设者。

实例初始化块在构造函数调用super()之后运行。

实例变量。

(Init块按它们出现的顺序执行。)