2022-09-21 17:38阅读: 27评论: 0推荐: 0

代码阅读题-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

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16716492.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(27)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起