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

时间:2011-04-17 07:12:11

标签: java constructor

如果我定义如下的类:


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

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

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

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

3 个答案:

答案 0 :(得分:16)

执行顺序是:

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

Section 12.5 of the Java Language Specification包含详细信息。

是否在构造函数中分配变量取决于你 - 我非常喜欢经验法则,如果初始值不依赖于任何构造函数参数,并且总是是与所有构造函数相同,使用变量初始值设定项。否则,在构造函数中指定它。

答案 1 :(得分:0)

您的代码中的变量具有类型,但在调用构造函数之前首先实例化x。 (对构造函数的x进行空检查以找出)。

至于推荐,这取决于你。一件事,例如在JavaBeans中,因为我通常不编写默认的公共构造函数(没有参数),所以我倾向于在声明中初始化一些字段(如果它们需要不为null)。否则,我在构造函数上实例化它们。

答案 2 :(得分:0)

我建议您进行测试,而不是仅仅从别人那里得到答案:

使anotherClass的构造函数打印通过的字符串。

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

    public myClass() {
        y = new anotherClass("inside constructor");
    } 
}

然后你可以告诉我们!