用java寫程式的時候很苦惱的一件事就是,如果将一個對象a賦給另一個對象b,那麼你改變a的變量值得時候,b的值也對應的變化。如果我們隻想單純的擷取那個時刻的a的狀況給b的話,就要用到clone方法了。
比如說如下代碼:
輸出結果是5,
下面就利用clone實作如上情況輸出結果是1.
克隆的實作需要一下幾步:
在派生類中覆寫基類的clone()方法,并聲明為public。
在派生類的clone()方法中,調用super.clone()。
在派生類中實作Cloneable接口。Cloneable接口沒有任何抽象的方法,這樣的成為辨別接口。實作這個接口,隻是為了告訴編譯器這個對象可以被克隆了。
首先我們在派生類中覆寫了Object類的Clone()方法,并聲明為public的。然後我們調用了super.clone()方法,這裡會抛出一個異常(對于這個異常大家可以自己檢視java的幫助文檔),是以必須用try……catch……語句捕獲,然後傳回此對象。這裡需要說明一下,Clone()方法傳回的是Object類型的,是以需要強制類型轉換
輸出結果是1;
ps:補充一道題
15. 不通過構造函數也能建立對象嗎()
A 是 B 否
答案:A
解析:Java建立對象的幾種方式(重要):
(1) 用new語句建立對象,這是最常見的建立對象的方法。
(2) 運用反射手段,調用java.lang.Class或者java.lang.reflect.Constructor類的newInstance()執行個體方法。
(3) 調用對象的clone()方法。
(4) 運用反序列化手段,調用java.io.ObjectInputStream對象的 readObject()方法。
(1)和(2)都會明确的顯式的調用構造函數 ;(3)是在記憶體上對已有對象的影印,是以不會調用構造函數 ;(4)是從檔案中還原類的對象,也不會調用構造函數。
引用:【1】http://blog.csdn.net/mengxiangyue/article/details/6818611
【2】http://blog.csdn.net/lanxuezaipiao/article/details/16753743
/********************************
* 本文來自部落格 “李博Garvin“
******************************************/