这是否有区别:
public class A {
B b;
A() {
b=new B();
}
}
和此:
public class A {
B b=new B();
A() {
}
}
如果有,那是什么?什么是更好的做法? 如果没有,最新推荐什么?
答案 0 :(得分:2)
据我所知,只要你只有一个构造函数就没有区别。如果您有多个构造函数,则需要确保在所有构造函数中分配它。因此我会推荐第二种方法。
答案 1 :(得分:1)
构造函数在初始化实例变量后运行,因此存在差异。在一个小例子中并不重要,但它可能与更复杂的代码有关。 (注意,代码的顺序无关紧要。如果初始化在构造函数中,则运行第二个。)
第二种方法更方便,所以我倾向于从它开始。第一种方法可能更有用(对于控制反转和多态),因此它经常被用在“真实”代码中。
class B {
B() {
System.out.println("B constructor");
}
}
public class A {
B b=new B();
A() {
System.out.println("A constructor");
}
public static void main(String[] args) {
new A();
}
}
输出:
B constructor
A constructor
...
class B {
B() {
System.out.println("B constructor");
}
}
public class A {
B b;
A() {
System.out.println("A constructor");
b=new B();
}
public static void main(String[] args) {
new A();
}
}
输出:
A constructor
B constructor
答案 2 :(得分:0)
他们之间的巨大差异。
在第一个选项中,只有在调用没有参数的构造函数时才会实例化。如果你放置并调用任何参数化的构造函数,则B类将不会实例化。
但是在第二个选项的情况下,无论任何构造函数调用,B类都将始终实例化。