一个实例是如何初始化从构造不同?(How is an instance initializer di

2019-06-21 07:37发布

换句话说,为什么你需要一个实例初始化? 你在过一个构造函数写一个实例初始化有什么区别或优势?

Answer 1:

这似乎可以解释得好:

实例初始化是实例变量初始化每当一种有用的替代:

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

  • 执行不能用一个实例变量初始化表示看中计算。 你可以,当然,总是在构造函数编写这样的代码。

但是,在一个类有多个构造函数,你就必须重复代码中的每个构造。 随着一个实例初始化,您可以只写代码一次,将无论什么构造函数用于创建对象执行。 实例初始化也是匿名内部类,不能在所有的声明任何构造函数是有用的。

来源:JavaWorld的在Java对象初始化 。



Answer 2:

在对象生命周期而言,没有什么区别。 两者在施工时间被调用,并在逻辑初始化块可以被认为是结构的一部分。

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

初始化可以通过保持下给变量的初始化逻辑被初始化提高代码的可读性:

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

无论使用哪个构造函数初始化的调用。

初始化可以在匿名内部类,可以用在构造函数不能。



Answer 3:

当你有很多的构造函数,并希望一些常用代码为每个构造可以使用例如initializer.As它呼吁所有构造函数执行。



Answer 4:

我会避免在一般实例初始化成语 - 唯一真正的优势,它给出了变量初始化是异常处理。

而且,由于一个init方法(从构造函数调用),还可以做例外处理,也集中构造设置代码,但它可以在构造函数的参数值进行操作的优点,我想说的是实例初始化是多余的,因此要避免。



Answer 5:

当我们使用一个匿名内部类的实例初始化在构造函数的真正优势可见

匿名内部类不能有构造函数 (因为他们是匿名的), 所以他们是一个非常自然地适合于实例的初始化程序



Answer 6:

初始化器是共享的构造之间的代码,它使代码更易读如果初始化与变量声明使用方式。

Java编译器副本初始化语句块到每一个构造函数。 因此,这种方法可用于共享的多个构造之间代码块。 Oracle文档



文章来源: How is an instance initializer different from a constructor?