这两种方法都有什么优点吗?
示例1:
class A {
B b = new B();
}
示例2:
class A {
B b;
A() {
b = new B();
}
}
- 没有什么区别 - 实例变量初始化实际上是由编译器放入构造函数中的。
- 第一个变体更具可读性。
- 您无法对第一个变体进行异常处理。
-
另外还有初始化块,它也由编译器放入构造函数中:
{
a = new A();
}
Check 孙老师的解释和建议 http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html
From 本教程 http://docstore.mik.ua/orelly/java-ent/jnut/ch03_02.htm:
然而,字段声明不是任何方法的一部分,因此它们不能像语句一样执行。相反,Java 编译器会自动生成实例字段初始化代码,并将其放入类的一个或多个构造函数中。初始化代码按照其在源代码中出现的顺序插入到构造函数中,这意味着字段初始值设定项可以使用在其之前声明的字段的初始值。
此外,您可能想要延迟初始化你的领域。如果初始化字段是一项昂贵的操作,您可以在需要时立即初始化它:
ExpensiveObject o;
public ExpensiveObject getExpensiveObject() {
if (o == null) {
o = new ExpensiveObject();
}
return o;
}
最终(正如 Bill 所指出的),为了依赖管理,最好avoid使用new
班上任何地方的操作员。相反,使用依赖注入 http://en.wikipedia.org/wiki/Dependency_injection更好 - 即让其他人(另一个类/框架)实例化并在您的类中注入依赖项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)