实例变量初始化与不初始化的区别

在做Swing的时候,为了把通用的界面框架抽象出来,经常采用模板方法,但是由于界面组件的初始化及布局都在构造函数中实现,于是就出现了下面的调用顺序

1.子构造函数->2.父构造函数->3.子模板方法->4.子类的实例变量初始化,在子类模板方法中初始化子类中的实例变量(子类的界面组件)之后,子类开始初始化自己的实例变量,结果把在模板方法中已经初始化的实例变量又初始化了一遍。如果子类不对其实例变量做初始化,那么第4步也不会进行,也就避免了这个问题

这就引出了一个问题,初始化实例变量为null和不初始化实例变量有了区别,下面是对这个问题写的测试代码,注意子类Child中的ch实例变量

当Child的ch变量不初始化时的代码:

此时输出“Parent”

 

当Child的ch变量初始化为null时的代码:

此时输出“null"

 

结论:当变量没有初始化时,会在分配对象内存时将所有变量置为初始值,但是不会在构造时自动为其再初始化一遍;

         当初始化变量时,首先在分配内存时将所有变量都置为初始值,并在构造时再执行其初始化语句;

         如果是在构造函数中使用模板方法模式,那么就要注意:如果在模板方法里为子类的变量做了赋值操作,那么在定义该变量时千万不要初始化,即使是初始化为null也会导致该变量被重新赋值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值