什么是类类型变量之间的区别或在构造函数/方法中实例化

时间:2015-04-13 20:24:15

标签: java design-patterns netbeans composition

public class MotoXCellPhone {

    //assume there's a speaker class
    private BlueToothSpeaker speaker; 

    //why instantiate in constructor?

    MotoXCellPhone() {
        speaker = new BlueToothSpeaker();
    }

    //or if i instantiate in a method?
    public BlueToothSpeaker useSpeaker() {
        speaker = new BlueToothSpeaker();
        return speaker;
    }
}

为什么我要在另一个类中实例化一个类'构造函数?我还没有完全理解作文,所以我对“为什么"一切

4 个答案:

答案 0 :(得分:1)

如果在方法中实例化它,则每次调用该方法时都会创建一个新的。如果这没有意义 - 如果你希望一个BlueToothSpeaker对象在其生命周期内绑定到MotoXCellPhone对象 - 那么你需要在构造函数中创建它(或注入它)。

答案 1 :(得分:1)

论点如下:如果其他人使用您的代码,他们可能不会调用useSpeakser(),因此speakers可能是null。在构造函数中实例化speakers断言它不会是null

答案 2 :(得分:0)

构造函数将在实例化MotoXCell时运行并实例化BlueToothSpeaker,而该方法仅在调用时实例化新类。

答案 3 :(得分:0)

有两种类型的成员初始化,每种都有利弊,我会尝试枚举它们:

  1. <强>早期初始化

    • 在声明成员时或在类构造函数
    • 中完成
    • 优点:
      • 创建的对象在其生命周期与父母&#34;同时开始,并且随时可用而无需进行任何检查
      • 对于工人类,创建的对象可以立即开始工作
    • 缺点:
      • 用于该对象的更多CPU /内存
      • 取决于可能永远不会使用该对象的上下文
  2. <强>懒惰初始化

    • 按需完成,通常在其吸气剂内
    • 优点:
      • 只有在首次需要时才会创建对象,从而减少其CPU /内存使用量
      • 不依赖于上下文,如果根本不需要该成员,则不会创建
    • 缺点:
      • 您需要始终通过父母&#34;内部的吸气剂访问会员。 class,否则你可能会遇到崩溃
      • 在处理多线程时必须小心(例如必须使用锁),这会对性能产生影响
  3. 根据班级的实施情况,您可以选择一个而不是另一个。