JAVA之初始化的小小测试

  《Thinking in java》中说,可以用静态方法打印出静态变量证明它们在使用之前完成初始化动作(英文版190/中文版97的练习14)。 个人以为,此方法不可行,因为,访问即触发初始化动作,而用NetBeans调试下即可证明。

   代码如下:

       

 

    由House.print()的输出结果就可以看出,访问即触发初始化:  

 

    步入House h1 = new House(),会发现,仅有静态变量 i 被初始化,间接证明了:

          1.静态变量初始化只有在必要时刻才会进行(因为变量 k 没被初始化)

          2.静态变量会在被使用之前完成初始化(此时,i 的值为0,而不是5)    

   

 继续执行,结果如下(中间有省略):    

    可知:

          1.静态对象的初始化,仅仅有声明就可完成(House h1)

          2.非静态变量也会自动初始化,比如,此时,w1,w2,w3就被初始化为null

          3.非静态变量的自动初始化是在静态变量的自动初始化后完成

   

继续执行,结果如下(中间有省略):    

    可知:

           1.静态变量初始化只有在必要时刻才会进行(因为变量 k 只到此时才被初始化)

           2.自动初始化将在构造器被调用之前发生(因为w2,w3已被初始化,而w4却未被初始化)

   

最后,w4被初始化,再次证明,构造器调用在自动初始化之后:    

   

程序执行结果:  

 

至此,测试结束...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值