Java初始化块执行流程解析:这段代码的运行顺序是怎样的?
Java类实例初始化执行流程解析
针对你给出的代码,实际运行时的执行顺序和你猜想的不一样,具体过程如下:
当创建TestClass的实例时:
- JVM先为实例分配内存,此时实例变量
i会被默认初始化为0(int类型的默认值)。 - 按照代码在类中出现的先后顺序执行初始化逻辑:
- 先执行实例初始化块:
{ i = 3; },这一步把i的值从0改成3。 - 接着执行实例变量的初始化语句(LINE 7):
int i = 2;,这一步直接给i赋值为2,覆盖了之前的3。
- 先执行实例初始化块:
- 最终实例的
i值是2。
简单来说:实例初始化块和实例变量初始化语句是按代码书写顺序依次执行的,不存在“跳过初始化块再回头执行”的情况。
举个反例,如果把变量初始化放在初始化块前面:
public class TestClass { int i = 2; { i = 3; } }
此时i最终的值会是3,因为先执行变量赋值为2,再执行初始化块把它改成3。
内容的提问来源于stack exchange,提问作者Oyst
相关产品推荐
相关产品推荐

