4

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

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

    public MyClass(int constructor1Arg)
    {}

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

3 回答 3

14

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

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

于 2012-04-16T17:34:06.413 回答
3

根据 Java 语言规范:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5

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

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

(第 5 步是运行构造函数)

于 2012-04-16T17:34:11.937 回答
3

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

于 2012-04-16T17:33:36.027 回答