首先执行哪个新建 - 在构造函数中还是外部?

Lai*_*uan 3 java constructor

如果我定义一个类如下:


public class myClass {
    private x = new anotherClass();
    private y;

    public myClass() {
        y = new anotherClass();
    } 
}

哪个变量会更早获得实例?x还是y?

并且,在构造函数之外分配变量是不建议的吗?

Jon*_*eet 16

执行顺序是:

  • 超类构造函数(或同一类的链式构造函数)
  • 实例变量初始值设定项(x在代码中分配的表达式)
  • 构造函数体(y在代码中分配的语句)

Java语言规范的12.5节包含详细信息.

是否在构造函数中分配变量取决于您 - 我非常喜欢经验法则,如果初始值不依赖于任何构造函数参数,并且对于所有构造函数始终相同,则使用变量初始化程序.否则,在构造函数中指定它.

  • 无论是否显式调用超类构造函数,它总是被调用为子类构造函数的第一个方法.所以是的,首先调用子类,但超级类首先完成. (2认同)
  • @Lai:不,除非你指定一个超类构造函数,它总是会尝试调用一个*parameterless*one.构造函数参数不会自动传递. (2认同)