发布于2026-07-04 阅读(0)
扫一扫,手机访问
一个 Ja va 对象能否被成功创建,并不是简单地看 new 表达式有没有返回引用。说到底,得等到静态代码块、构造代码块和构造方法体全部执行完毕,这个对象才算真正“活”过来。静态块在类加载时跑一次,构造块每次 new 之前都会自动执行,而局部块只控制变量作用域——这三块代码的执行顺序,直接决定了对象从无到有的每一步是否完整可靠。这不是什么细枝末节,而是对象能否真正被创建出来的关键路径。

当类第一次被主动使用(比如 new 对象、调用静态方法),JVM 就会触发类初始化。这时候,所有静态代码块会按照书写顺序执行一次。注意,它不依赖任何对象,只和类本身绑定。如果静态块里抛出了异常,整个类初始化直接失败——后续任何对象都无法创建,连门都进不去。
每次 new 对象时,在调用构造方法体之前,构造代码块(也就是实例代码块)都会自动执行。它放在类中、方法外,没有 static 修饰。作用很简单:把多个构造器共用的初始化逻辑抽出来,避免到处重复。
int x = 10;)和构造代码块在底层都被编译进 方法,执行顺序由源码中间出现的位置决定写在方法内部的 { } 块,只控制变量作用域和栈空间释放时机,和对象创建过程完全无关。它在方法调用时执行,每次调用都重新运行,变量一出块就失效。
public、static 等都不行)一个对象只有在类初始化完成(静态块跑完)、实例初始化完成(构造代码块 + 构造方法体全部执行完毕)后,才被视为创建成功。中间任何一个环节中断(比如静态块抛异常、构造块中 throw RuntimeException),对象就不会进入“可达”状态,GC 也不会介入回收——因为它根本没活过来。
new 表达式返回引用,不等于对象已就绪;必须等 执行完才算“活”了
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8