为了账号安全,请及时绑定邮箱和手机立即绑定

应该在声明或构造函数中实例化实例变量吗?

应该在声明或构造函数中实例化实例变量吗?

米脂 2019-07-01 16:05:04
应该在声明或构造函数中实例化实例变量吗?这两种方法都有什么好处吗?例1:class A {     B b = new B();}例2:class A {     B b;     A() {          b = new B();     }}
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

另一个选择是使用依赖注入.

class A{
   B b;

   A(B b) {
      this.b = b;
   }}

这消除了创建B的构造函数中的A..这将使您的代码更易于测试和长期维护。这样做的目的是减少这两个类之间的耦合。AB..这给您带来的好处是,您现在可以传递任何扩展的对象。B(或工具)B如果它是一个接口)A的构造函数,它将工作。B对象的调用者公开它。A构造函数你将不得不考虑利益是否值得这样的权衡,但在许多情况下,它们是值得的。


查看完整回答
反对 回复 2019-07-01
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我今天被烧得很有趣:

class MyClass extends FooClass {
    String a = null;

    public MyClass() {
        super();     // Superclass calls init();
    }

    @Override
    protected void init() {
        super.init();
        if (something)
            a = getStringYadaYada();
    }}

看到错误了吗?原来a = null初始化器被调用超类构造函数被调用。由于超类构造函数调用init(),所以a尾随a = null初始化。


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 537 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号