Java代码块用于控制初始化逻辑的执行时机:静态代码块在类加载时执行一次,实例代码块在每次创建对象时、构造方法前执行,二者分别用于静态资源预加载和实例字段统一初始化。
Java中使用代码块,主要是为了在类加载或对象创建时执行一些初始化逻辑,且能控制这些逻辑的执行时机和作用范围。它比构造方法更早执行,又比普通方法更贴近底层生命周期,是实现静态资源预加载、实例字段默认初始化、调试跟踪等场景的重要工具。
静态代码块用 static { ... } 定义,属于类级别。JVM在首次主动使用该类(如创建实例、访问静态成员、反射加载)时触发类加载过程,此时静态代码块执行,
且仅执行一次。
方法)实例代码块用 { ... } 定义(无static修饰),属于实例级别。每次调用构造方法前,JVM会先执行实例代码块,再进入构造方法体。
构造方法负责接收参数、完成特定初始化;而实例代码块更适合处理与参数无关的通用初始化逻辑。比如:
这样能让构造方法更简洁,也便于维护——修改通用初始化逻辑只需改一处代码块,不用遍历多个构造器。
当执行 new Child() 时,完整初始化顺序如下:
这个顺序由JVM规范严格保证,理解它有助于排查初始化异常或字段未按预期赋值的问题。