Java Clone方法學習整理
阿新 • • 發佈:2018-12-18
物件拷貝時,類的建構函式是不會被執行的。 一個實現了 Cloneable 並重寫了 clone 方法的類 A,有一個無參構造或有參構造 B,通過 new 關鍵字產生了一個物件 S,再然後通過 S.clone()方式產生了一個新的物件 T,那麼在物件拷貝時建構函式 B 是不會被執行的, 物件拷貝時確實建構函式沒有被執行,這個從原理來講也是可以講得通的,Object 類的 clone 方法的 原理是從記憶體中(具體的說就是堆記憶體)以二進位制流的方式進行拷貝,重新分配一個記憶體塊,那建構函式 沒有被執行也是非常正常的
最後說一下,原型模式的使用場景
1、在建立物件的時候,我們不只是希望被建立的物件繼承其基類的基本結構,還希望繼承原型物件的資料。
2、希望對目標物件的修改不影響既有的原型物件(深度克隆的時候可以完全互不影響)。
3、隱藏克隆操作的細節,很多時候,對物件本身的克隆需要涉及到類本身的資料細節。
4、類初始化需要消化非常多的資源,這個資源包括資料、硬體資源等;
5、通過 new 產生一個物件需要非常繁瑣的資料準備或訪問許可權,則可以使用原型模式;
6、一個物件需要提供給其他物件訪問,而且各個呼叫者可能都需要修改其值時,可以考慮使用原型模式拷貝多個物件供呼叫者使用。在實際專案中,原型模式很少單獨出現,一般是和工廠方法模式一起出現,通過 clone的方法建立一個物件,然後由工廠方法提供給呼叫者。原型模式先產生出一個包含