对象创建成功需静态代码块、构造代码块、构造方法体全部执行完毕;静态块类加载时执行一次,构造块每次new前执行,局部块仅控变量作用域。
代码块执行顺序直接决定对象“从无到有”的每一步是否完整、可靠——它不是执行细节,而是对象能否真正被创建出来的关键路径。
当类第一次被主动使用(比如 new 对象、调用静态方法),JVM 触发类初始化,此时所有静态代码块按书写顺序执行一次。它不依赖任何对象,只和类本身绑定。如果静态块里抛出异常,整个类初始化失败,后续任何对象都无法创建。
每次 new 对象时,在调用构造方法体之前,构造代码块(即实例代码块)都会自动执行。它位于类中、方法外,无 static 修饰,作用是把多个构造器共用的初始化逻辑抽出来,避免重复。
写在方法内部的 { } 块,只控制变量作用域和栈空间释放时机,和对象创建过程完全无关。它在方法调用时执行,每次调用都重新运行,变量一出块就失效。
立即学习“Java免费学习笔记(深入)”;
一个对象只有在类初始化完成(静态块跑完)、实例初始化完成(构造代码块 + 构造方法体全部执行完毕)后,才被视为创建成功。中间任一环节中断(如静态块抛异常、构造块中 throw RuntimeException),对象就不会进入“可达”状态,GC 也不会介入回收——因为它根本没活过来。