Java:是否总是保证调用构造函数外部的成员初始化?

Java:是否总是保证调用构造函数外部的成员初始化?,java,Java,如果我在构造函数之外初始化一个成员变量,那么该成员实际上什么时候被初始化?是否保证为类的所有可能构造函数初始化它 public class MyClass { private String myName = "MyClass"; public MyClass(int constructor1Arg) {} public MyClass(int constructor2Arg1, int constructor2Arg2) {} } 是,如果在创建对象

如果我在构造函数之外初始化一个成员变量,那么该成员实际上什么时候被初始化?是否保证为类的所有可能构造函数初始化它

public class MyClass
{
    private String myName = "MyClass";

    public MyClass(int constructor1Arg)
    {}

    public MyClass(int constructor2Arg1, int constructor2Arg2)
    {}
}

是,如果在创建对象时没有异常


是的。所有实例变量初始值设定项都在超级构造函数执行之后执行,但在此类中声明的任何构造函数体之前执行


(正如Jigar Joshi提到的,这是假设超级构造函数执行正常。)

根据Java语言规范:

在调用构造函数之前初始化实例变量,除非之前的任何初始化引发错误:

执行该类的实例初始值设定项和实例变量初始值设定项,将实例变量初始值设定项的值按从左到右的顺序分配给相应的实例变量,它们在类的源代码中以文本形式出现。如果执行这些初始值设定项中的任何一个会导致异常,则不会再处理其他初始值设定项,并且此过程会在该异常的情况下突然完成。否则,继续执行步骤5。


(第5步正在运行构造函数)

是,如果在创建object时没有异常,请参见。