实例初始值设定项与构造函数有何不同?

2022-08-31 12:01:06

换句话说,为什么需要实例初始值设定项?与构造函数相比,编写实例初始值设定项有什么区别或优势?


答案 1

这似乎很好地解释了它:

实例初始值设定项是实例变量初始值设定项的有用替代方法,无论何时:

  • 初始值设定项代码必须捕获异常,或者

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

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

来自: JavaWorld Object 初始化 in Java


答案 2

在对象生命周期方面,没有区别。两者都在构造时调用,并且从逻辑上讲,初始值设定项块可以被视为构造的一部分。

从语义上讲,初始值设定项是一个不错的工具,原因如下:

初始值设定项可以通过将初始化逻辑保留在正在初始化的变量旁边来提高代码的可读性:

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

       // a bunch of other vars
   }

   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
       }
   }

无论使用哪个构造函数,都会调用初始值设定项。

初始值设定项可以在匿名内部类中使用,而构造函数不能。


推荐