构造函数内的代码

时间:2014-04-26 20:16:15

标签: java constructor

我有以下Java类:

public class MyClass{
    private List<MyObject> lst;

    public MyClass(){
        //----Starting initial code-----
        MyAdditionalObject obj=new MyAdditionalObject();
        Event e= new Event()
        obj.attacheEvent(e);
        //----initial code end-----
        lst.add(e);
    }
}

将这样的初始代码放在构造函数中是不好的做法?

2 个答案:

答案 0 :(得分:3)

如果您有重载的构造函数,请使用初始化块以避免重复代码。

public class MyClass{
   private List<MyObject> lst;

   //Initialization block
   {
       //----Starting initial code-----
       MyAdditionalObject obj=new MyAdditionalObject();
       Event e= new Event()
       obj.attacheEvent(e);
       //----initial code end-----
   }

   public MyClass(){...}

   public MyClass(int i){...}

   public MyClass(String i){...}

}

答案 1 :(得分:1)

使用构造函数初始化实例成员有两种替代方法......

第一个实例初始化块

{
    // whatever code is needed for initialization goes here
    MyAdditionalObject obj=new MyAdditionalObject();
    Event e= new Event()
    obj.attacheEvent(e);
}

推荐实例初始化块而不是构造函数链接的原因是

  

Java编译器将初始化程序块复制到每个构造函数中。   因此,这种方法可用于共享一段代码   多个构造函数。

因此,方法将更简单,并将减少垂直问题。

第二个是使用最终方法来初始化实例成员。无法在子类中重写最终方法。

示例:

class Whatever {
    private varType myVar = initializeInstanceVariable();

    protected final varType initializeInstanceVariable() {

        // initialization code goes here
        MyAdditionalObject obj=new MyAdditionalObject();
        Event e= new Event()
        obj.attacheEvent(e);
    }
}

参考Java文档以获得答案:Initializing fields.