首頁  >  文章  >  Java  >  如何使用Java中的clone()方法來取代new關鍵字?

如何使用Java中的clone()方法來取代new關鍵字?

WBOY
WBOY轉載
2023-04-22 19:55:061442瀏覽

使用clone()取代new

在Java中新建物件實例最常用的方法是使用 new 關鍵字。 JDK對 new 的支援非常好,使用 new  關鍵字建立輕量級物件時,速度非常快。但是,對於重量級對象,由於物件在建構函式中可能會進行一些複雜且耗時的操作,因此,建構函式的執行時間可能會比較長。導致系統短期內無法獲得大量的實例。為了解決這個問題,可以使用Object.clone()  方法。

Object.clone() 方法可以繞過建構函數,快速複製一個物件實例。但是,在預設情況下,clone()方法產生的實例只是原始物件的淺拷貝。

這裡不得不提Java只有值傳遞了,關於這點,我的理解是基本資料型別引用的是值,普通物件引用的也是值,不過這個普通物件引用的值其實是物件的地址。程式碼範例:

int i = 0; int j = i; //i的值是0  User user1 = new User();  User user2 = user1; //user1值是new User()的内存地址

如果需要深拷貝,則需要重新實作 clone() 方法。以下來看看ArrayList實作的clone()方法:

public Object clone() {                try {             ArrayList<?> v = (ArrayList<?>) super.clone();             v.elementData = Arrays.copyOf(elementData, size);             v.modCount = 0;                         return v;         } catch (CloneNotSupportedException e) {                         // this shouldn't happen, since we are Cloneable             throw new InternalError(e);         }     }

在ArrayList的clone()方法中,首先使用 super.clone()  方法產生一份淺拷貝物件。然後拷貝一份新的elementData陣列讓新的ArrayList去引用。使克隆後的ArrayList物件與原始物件持有不同的引用,實現了深拷貝。

以上是如何使用Java中的clone()方法來取代new關鍵字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除