题目如下
按理来说,初始化顺序应该是:
- 静态代码块
静态变量在静态代码块语句之前执行,因为向前引用非法(静态变量在静态代码块后执行)
main()
- 构造代码块
- 构造方法
但是这里不太一样,这里用到了懒汉单例模式
运行结果是这样的:
构造函数执行,此时:
0 1 3
静态代码块执行此时count3=4
count1=1
count2=2
count3=5
看起来构造函数好像跑到了静态代码块之前,但事实上仍然是正确的初始化顺序:
原因在于在静态代码块之前实例化了一个自己的静态引用变量,它在静态代码块之前执行了,先一步调用了构造函数
那么是不是因为它写在前面才先于静态代码块执行的呢?还真是
静态代码块执行此时count3=3
构造函数执行,此时:
0 1 4
count1=1
count2=2
count3=5
标签:初始化,顺序,Java,静态,代码,count3,执行,构造函数
From: https://www.cnblogs.com/yaocy/p/16716492.html