[英]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。
有時,在遵循第二個變體時,您甚至可以完全刪除自定義構造函數。
構造函數中的初始化確實允許您輕松處理異常,這在您的代碼庫成熟時會很有幫助。
但是有些人說初始化時的聲明更具可讀性。 但是,字段在源中出現的順序變得很重要。
除了例外考慮,這取決於個人意見。
第二種方法更好。
在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.