如果我定义如下的类:
public class myClass { private x = new anotherClass(); private y; public myClass() { y = new anotherClass(); } }
哪个变量会先获得实例? x还是y?
并且,在构造函数之外分配变量是不推荐的吗?
答案 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");
}
}
然后你可以告诉我们!