实例变量在方法内初始化

时间:2017-03-08 07:38:54

标签: java

如果我们尝试初始化在方法内的类级别声明的引用,我想知道任何级别的差异或影响。为什么我们要在类级别进行引用并在方法范围内初始化它。

第二个问题:useBox2

怎么样

请提供技术理由帮助

public class S {

    private MyBox b;

    public void useBox()
    {

        b = getBox()

        b.abc();

     }

    public synchronized void useBox2(){

        b = newBox();
    }

    private Box getBox()
    {

        return new MyBox()
    }

}

2 个答案:

答案 0 :(得分:0)

您所指的可能是lazy initialization,包括仅在需要时初始化对象,以(例如)更好地管理内存分配。

使用syncronized关键字将影响不同线程访问方法的方式。作为一个类属性,它的“值”将在所有线程中共享。

答案 1 :(得分:0)

这个问题的设计有问题。

  1. 最好在实际对象初始化期间初始化对象变量。否则,代码应处理所有可能的NullPointerException个案例。我真的不喜欢对每个可能的代码行进行空检查。
  2. 使用此样式需要懒惰地初始化对象也不是一个好习惯。它让代码变得更加混乱。需要进行空检查,如果object为null,则调用方法初始化对象。这些例程应该放在需要该对象的每个可能的代码行中。
  3. 我认为上述条件会使代码紧密耦合,并会导致更多问题。我在质疑为什么这个对象是一个类变量,如果在初始化实际对象时不需要它。

    另见

    Coupling (computer programming)

    Creational design patterns