代码阅读题-Java初始化顺序

题目如下

按理来说,初始化顺序应该是:

  1. 静态代码块

静态变量在静态代码块语句之前执行,因为向前引用非法(静态变量在静态代码块后执行)

  1. main()
  2. 构造代码块
  3. 构造方法

但是这里不太一样,这里用到了懒汉单例模式
运行结果是这样的:

构造函数执行,此时:
0 1 3
静态代码块执行此时count3=4
count1=1
count2=2
count3=5

看起来构造函数好像跑到了静态代码块之前,但事实上仍然是正确的初始化顺序:
原因在于在静态代码块之前实例化了一个自己的静态引用变量,它在静态代码块之前执行了,先一步调用了构造函数

那么是不是因为它写在前面才先于静态代码块执行的呢?还真是

静态代码块执行此时count3=3
构造函数执行,此时:
0 1 4
count1=1
count2=2
count3=5
posted @ 2022-09-21 17:38  YaosGHC  阅读(31)  评论(0)    收藏  举报