代码阅读题-Java初始化顺序
题目如下
按理来说,初始化顺序应该是:
- 静态代码块
静态变量在静态代码块语句之前执行,因为向前引用非法(静态变量在静态代码块后执行)
main()
- 构造代码块
- 构造方法
但是这里不太一样,这里用到了懒汉单例模式
运行结果是这样的:
构造函数执行,此时: 0 1 3 静态代码块执行此时count3=4 count1=1 count2=2 count3=5
看起来构造函数好像跑到了静态代码块之前,但事实上仍然是正确的初始化顺序:
原因在于在静态代码块之前实例化了一个自己的静态引用变量,它在静态代码块之前执行了,先一步调用了构造函数
那么是不是因为它写在前面才先于静态代码块执行的呢?还真是
静态代码块执行此时count3=3 构造函数执行,此时: 0 1 4 count1=1 count2=2 count3=5
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16716492.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步