由一道题来看java初始化顺序

今天看到一道题目,是这样的:(我在里面打印了一些语句,先注释掉了)

 

 

打印的结果为1、2;

 

当然如果对初始化顺序很了解的人,会觉得这道题其实不咋的。。下面我给分析一下这道题吧

 

这时候把注释放开,打印结果如下:

Singleton   counter1:1

Singleton   counter1:1

Singleton.counter1:1

Singleton.conuter2:2

静态变量及构造函数已经初始化附值完毕

3

obj.counter1==1

obj.counter2==2

 

在得到实例化之前,程序先去运行它的static变量,也就是最上面的第一句话,由这句话把counter1和counter2的值变为1,一开始它们都默认为0,因为new出实例是在static int counter和static int counter2之前。。程序的执行是有顺序的,也就是变为1后,

public static int counter1;

public static int counter2 = 2;

这两步又对变量重新赋值,因此导致最后的结果是1、2。。

为了证实我的想法,可把private static Singleton obj= new Singleton();移到第二条去或者第三条去,出来的结果是不一样的。。

 

总结一下初始化的顺序:1、静态变量;2、静态初始化块,即用{},没有方法名无返回值;3、变量;4、初始化块;5、构造器。

静态变量的赋值有一定的先后顺序!

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值