首页  >  文章  >  Java  >  Java 中静态初始化块和实例初始化块的执行顺序是什么?

Java 中静态初始化块和实例初始化块的执行顺序是什么?

Barbara Streisand
Barbara Streisand原创
2024-11-24 08:28:09857浏览

What's the Execution Order of Static and Instance Initializer Blocks in Java?

Java 中静态初始化块和实例初始化块的执行顺序

使用 Java 类时,必须了解静态初始化块和实例初始化块的执行顺序执行实例初始化块。这些块执行重要的操作,例如分配初始值以及初始化类和对象成员。

实例初始化程序块

执行用大括号 { } 括起来的实例初始化程序块每次创建类的实例时。它们按照它们在类内代码中出现的顺序执行。此行为在所有类中都是一致的。

静态初始化块

静态初始化块也用花括号 { } 括起来,前面有 static 关键字,在以下情况下执行该类已加载。它们不与任何特定实例关联,并且仅执行一次,无论创建的实例数量如何。

特定执行顺序

Java 语言规范 (JLS)定义静态初始化块的执行顺序:

  1. 执行父类的静态初始化块首先。
  2. 接下来执行直接子类的静态初始化块。
  3. 递归地遵循此顺序,直到所有子类都执行了其静态初始化块。

示例

考虑以下代码示例:

class Grandparent {
    static { System.out.println("Static - Grandparent"); }
}

class Parent extends Grandparent {
    static { System.out.println("Static - Parent"); }
}

class Child extends Parent {
    static { System.out.println("Static - Child"); }
}

执行 main 方法时,会生成以下输出:

Static - Grandparent
Static - Parent
Static - Child

这表明静态初始化块按照父级 -> 父级 -> 的顺序执行。子类。

例外

此规则有一个值得注意的例外。如果父类定义了一个从未被引用的类,则其静态初始化块将不会被执行。这是因为类加载器仅初始化明确需要的类。

以上是Java 中静态初始化块和实例初始化块的执行顺序是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn