在 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");
哪种方法更好? 在 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");