Java 中静态初始化块和实例初始化块的执行顺序
使用 Java 类时,必须了解静态初始化块和实例初始化块的执行顺序执行实例初始化块。这些块执行重要的操作,例如分配初始值以及初始化类和对象成员。
实例初始化程序块
执行用大括号 { } 括起来的实例初始化程序块每次创建类的实例时。它们按照它们在类内代码中出现的顺序执行。此行为在所有类中都是一致的。
静态初始化块
静态初始化块也用花括号 { } 括起来,前面有 static 关键字,在以下情况下执行该类已加载。它们不与任何特定实例关联,并且仅执行一次,无论创建的实例数量如何。
特定执行顺序
Java 语言规范 (JLS)定义静态初始化块的执行顺序:
示例
考虑以下代码示例:
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中文网其他相关文章!