gpt4 book ai didi

java - 我应该在声明时还是在构造函数中实例化实例变量?

转载 作者:行者123 更新时间:2023-12-01 19:14:44 26 4
gpt4 key购买 nike

这两种方法都有什么优点吗?

示例1:

class A {
B b = new B();
}

示例2:

class A {
B b;

A() {
b = new B();
}
}

最佳答案

  • 没有什么区别 - 实例变量初始化实际上是由编译器放入构造函数中的。
  • 第一个变体更具可读性。
  • 您无法对第一个变体进行异常处理。
  • 还有一个初始化 block ,它也由编译器放入构造函数中:

    {
    a = new A();
    }

检查Sun's explanation and advice

来自this tutorial :

Field declarations, however, are not part of any method, so they cannot be executed as statements are. Instead, the Java compiler generates instance-field initialization code automatically and puts it in the constructor or constructors for the class. The initialization code is inserted into a constructor in the order it appears in the source code, which means that a field initializer can use the initial values of fields declared before it.

此外,您可能想要延迟初始化您的字段。如果初始化字段是一项昂贵的操作,您可以在需要时立即初始化它:

ExpensiveObject o;

public ExpensiveObject getExpensiveObject() {
if (o == null) {
o = new ExpensiveObject();
}
return o;
}

最终(正如 Bill 所指出的),为了进行依赖管理,最好避免在类中的任何位置使用 new 运算符。相反,使用 Dependency Injection更好 - 即让其他人(另一个类/框架)实例化并在您的类中注入(inject)依赖项。

关于java - 我应该在声明时还是在构造函数中实例化实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com