为了账号安全,请及时绑定邮箱和手机立即绑定

实例初始化器与构造函数有何不同?

实例初始化器与构造函数有何不同?

qq_遁去的一_1 2019-08-27 13:56:09
实例初始化器与构造函数有何不同?换句话说,为什么需要实例初始化器?在构造函数上编写实例初始化程序有什么区别或优势?
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

这似乎解释得很好:

在以下情况下,实例初始值设定项是实例变量初始化程序的有用替代

  • 初始化代码必须捕获异常,或

  • 执行无法用实例变量初始化程序表示的花哨计算。当然,您可以在构造函数中编写此类代码。

但是在具有多个构造函数的类中,您必须在每个构造函数中重复代码。使用实例初始化程序,您只需编写一次代码,无论使用何种构造函数创建对象,都将执行该代码。实例初始值设定项在匿名内部类中也很有用,它们根本不能声明任何构造函数。


查看完整回答
反对 回复 2019-08-27
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

就对象生命周期而言,没有区别。两者都在构造时调用,逻辑上初始化块可以被视为构造的一部分。

从语义上讲,初始化程序是一个很好的工具,有以下几个原因:

初始化程序可以通过将初始化逻辑保持在初始化变量旁边来提高代码可读性:

   public class Universe {
       public int theAnswer;
       {
         int SIX = 6;
         int NINE = 7;
         theAnswer = SIX * NINE;
       }

       // a bunch of other vars
   }

VS

   public class Universe {
       public int theAnswer;

       // a bunch of other vars

       public Universe() {
         int SIX = 6;
         int NINE = 7;
         theAnswer = SIX * NINE;

         // other constructor logic
       }
   }

无论使用哪个构造函数,都会调用初始化程序。

初始化程序可以在匿名内部类中使用,而构造函数则不能。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 375 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信