在Java中创建对象的正确方法是什么?

时间:2015-03-19 12:19:52

标签: java object constructor

哪种方法更好? 在类构造函数中创建对象:

public class Menu{
private JButton start;
// ...
public Menu(){
start = new JButton("Start");
// ...
}
}

或在变量声明时创建对象?:

public class Menu{
private JButton start = new JButton("Start");
// ...
public Menu(){
// ...
}
}

有什么区别?

9 个答案:

答案 0 :(得分:3)

两种变体都可以,但我更喜欢第二种变体,因为只有少量语句 - 写入,但更重要的是阅读和维护。

在这种情况下,AFAIK没有运行时差异。

有时,在遵循第二个变体时,您甚至可以完全删除自定义构造函数。

答案 1 :(得分:3)

已经回答here,问题出在C#上,但逻辑仍然是一样的。

据说这些规则非常完整:

1。不要使用声明中的默认值进行初始化(null,false,0,0.0 ...)。

2. 如果您没有更改字段值的构造函数参数,则首选声明初始化。

3. 如果字段的值因构造函数参数而更改,则将初始化放在构造函数中。

4. 在练习中保持一致。 (最重要的规则)

阅读评论以获取更多详细信息。

答案 2 :(得分:1)

构造函数中的初始化确实允许您轻松处理异常,这可以在您的代码库成熟时提供帮助。

但是有些人说初始化时的声明更具可读性。但是那些字段出现在源中的 order 变得很重要。

除了例外情况外,还有个人意见。

答案 3 :(得分:1)

第二种方法更好。

在java中创建对象有四种不同的方法:

一个。使用新关键字 这是在java中创建对象的最常用方法。几乎99%的对象都是以这种方式创建的。

MyObject object = new MyObject();

B中。使用Class.forName() 如果我们知道班级的名称&如果它有一个公共默认构造函数,我们可以用这种方式创建一个对象。

MyObject object =(MyObject)Class.forName(" com.sample.MyObject")。newInstance();

℃。使用clone() clone()可用于创建现有对象的副本。

MyObject anotherObject = new MyObject(); MyObject对象= anotherObject.clone();

d。使用对象反序列化 对象反序列化只不过是从序列化形式创建对象。

ObjectInputStream inStream = new ObjectInputStream(anInputStream); MyObject object =(MyObject)inStream.readObject();

答案 4 :(得分:0)

没有区别。我通常更喜欢使用第二种方式,但是如果你需要进行异常处理,那么你需要使用第一种方式。

答案 5 :(得分:0)

使用第一个选项,您可以为对象初始化添加更多逻辑(异常处理,日志记录等)。

注意:如果您想在某些时候考虑依赖注入,那么声明初始化不是一种选择。

答案 6 :(得分:0)

您可以通过不同方式创建对象。正如Neeraj已经说Lazy Initialization有时可能是首选方式。

在您的示例中,只要实例化父对象就需要按钮,您可以使用两种方式。

但您也可以考虑以下示例,您可以在需要时准确创建子对象。

public class MyObject{
    private List<String> myList = null;

    public MyObject(){
        //do whatever you want
    }

    public void add(String toAdd){
        if(myList == null){
            myList = new ArrayList<String>();
        }
        myList.add(toAdd);
    }

}

答案 7 :(得分:-1)

您可以双向创建对象,我建议您使用

JButton start = new JButton("Start");

答案 8 :(得分:-3)

最好的方法是在类的构造函数中创建和初始化对象。