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

What is the proper way of creating objects in Java?

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

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

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

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

和有什么区别?

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

据我所知,在这种情况下没有运行时差异。

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

构造函数中的初始化确实允许您轻松处理异常,随着代码库的成熟,这会很有帮助。

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

抛开例外考虑,全看个人意见。

没有区别。我一般比较喜欢用第二种方式,但是如果你需要有异常处理,那就需要用第一种方式了。

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

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

已经回答了here,问题是C#的,但是逻辑还是一样的。

据说遵循这些规则,比较完整:

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

2. 如果您没有更改字段值的构造函数参数,请在声明中进行初始化。

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

4. 坚持练习。 (最重要的规则)

阅读评论了解更多详情。

您可以用不同的方式创建对象。正如 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);
    }

}

最好的方法是在 class.

的构造函数中创建和初始化对象

第二种方法更好

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

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

MyObject 对象 = new MyObject();

乙。使用 Class.forName() 如果我们知道 class 的名称并且它有一个 public 默认构造函数,我们可以用这种方式创建一个对象。

MyObject 对象 = (MyObject) Class.forName("com.sample.MyObject").newInstance();

摄氏度。使用克隆() clone() 可用于创建现有对象的副本。

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

D.使用对象反序列化 对象反序列化只不过是从其序列化形式创建一个对象。

ObjectInputStream inStream = new ObjectInputStream(anInputStream); MyObject 对象 = (MyObject) inStream.readObject();

您可以两种方式创建对象,我建议您使用

JButton start = new JButton("Start");