簡體   English   中英

在 Java 中創建對象的正確方法是什么?

[英]What is the proper way of creating objects in Java?

哪種方法更好? 在類構造函數中創建對象:

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

或在變量聲明時創建對象?:

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

有什么區別?

兩種變體都可以,但我更喜歡第二個,因為少了一個語句——寫,但更重要的是閱讀和維護。

在這種情況下沒有運行時差異,AFAIK。

有時,在遵循第二個變體時,您甚至可以完全刪除自定義構造函數。

已經在這里回答,問題是針對C#的,但是邏輯還是一樣的。

據說遵循這些規則,這些規則非常完整:

1.不要使用聲明中的默認值(null、false、0、0.0...)進行初始化。

2.如果您沒有更改字段值的構造函數參數,則首選聲明中的初始化。

3.如果字段的值因構造函數參數而改變,則將初始化放在構造函數中。

4.在你的實踐中保持一致。 (最重要的規則)

閱讀評論了解更多詳情。

構造函數中的初始化確實允許您輕松處理異常,這在您的代碼庫成熟時會很有幫助。

但是有些人說初始化時的聲明更具可讀性。 但是,字段在源中出現的順序變得很重要。

除了例外考慮,這取決於個人意見。

第二種方法更好。

在java中有四種不同的方式來創建對象:

A. 使用 new 關鍵字 這是在 java 中創建對象最常見的方式。 幾乎 99% 的對象都是以這種方式創建的。

MyObject 對象 = new MyObject();

B. 使用 Class.forName() 如果我們知道類的名稱並且它有一個公共默認構造函數,我們可以通過這種方式創建一個對象。

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

C. 使用 clone() clone() 可用於創建現有對象的副本。

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

D. 使用對象反序列化 對象反序列化只不過是從它的序列化形式創建一個對象。

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

沒有區別。 我通常更喜歡使用第二種方式,但是如果您需要進行異常處理,那么您需要使用第一種方式。

使用第一個選項,您可以向對象初始化(異常處理、日志記錄等)添加更多邏輯。

注意:如果你想在某個時候考慮依賴注入,那么聲明時的初始化不是一個選項。

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

}

您可以兩種方式創建對象,我建議您使用

JButton start = new JButton("Start");

最好的方法是在類的構造函數中創建和初始化對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM