一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺析Java中clone()方法淺克隆與深度克隆

淺析Java中clone()方法淺克隆與深度克隆

2020-09-13 15:20信念隨夢 Java教程

Java克隆(Clone)是Java語言的特性之一,本篇文章主要介紹了Java中的Clone機制是如何工作的,需要的朋友可以參考下

   現在Clone已經不是一個新鮮詞語了,伴隨著“多莉”的產生這個詞語確實很“火”過一陣子,在Java中也有這么一個概念,它可以讓我們很方便的“制造”出一個對象的副本來,下面來具體看看Java中的Clone機制是如何工作的?

     1. Clone&Copy

     假設現在有一個Employee對象,Employee tobby =new Employee(“CMTobby”,5000),通
常我們會有這樣的賦值Employee cindyelf=tobby,這個時候只是簡單了copy了一下reference,cindyelf和tobby都指向內存中同一個object,這樣cindyelf或者tobby的一個操作都可能影響到對方。

打個比方,如果我們通過cindyelf.raiseSalary()方法改變了salary域的值,那么tobby通過getSalary()方法得到的就是修改之后的salary域的值,顯然這不是我們愿意看到的。我們希望得到tobby的一個精確拷貝,同時兩者互不影響,這時候我們就可以使用Clone來滿足我們的需求。

Employee cindy=tobby.clone(),這時會生成一個新的Employee對象,并且和tobby具有相同的屬性值和方法。

      2. Shallow Clone&Deep Clone

Clone是如何完成的呢?Object在對某個對象實施Clone時對其是一無所知的,它僅僅是簡單地執行域對域的copy,這就是Shallow Clone。

這樣,問題就來了咯,以Employee為例,它里面有一個域hireDay不是基本型別的變量,而是一個reference變量,經過Clone之后就會產生一個新的Date型別的reference,它和原始對象中對應的域指向同一個Date對象,這樣克隆類就和原始類共享了一部分信息,而這樣顯然是不利的,過程下圖所示:

淺析Java中clone()方法淺克隆與深度克隆

 這個時候我們就需要進行deep Clone了,對那些非基本型別的域進行特殊的處理,例如本例中的hireDay。我們可以重新定義Clone方法,對hireDay做特殊處理,如下代碼所示:

?
1
2
3
4
5
6
7
8
9
class Employee implements Cloneable
{
  public Object clone() throws CloneNotSupportedException
  {
   Employee cloned = (Employee) super.clone();
  cloned.hireDay = (Date) hireDay.clone()
  return cloned;
  }
}

3. Clone()方法的保護機制

在Object中Clone()是被申明為protected的,這樣做是有一定的道理的,以Employee

類為例,通過申明為protected,就可以保證只有Employee類里面才能“克隆”Employee對象,原理可以參考我前面關于public、protected、private的學習筆記。

4. Clone()方法的使用

Clone()方法的使用比較簡單,注意如下幾點即可:

a. 什么時候使用shallow Clone,什么時候使用deep Clone,這個主要看具體對象的域是什么性質的,基本型別還是reference variable

b. 調用Clone()方法的對象所屬的類(Class)必須implements Clonable接口,否則在調用Clone方法的時候會拋出CloneNotSupportedException。

希望本篇文章可以幫助到小伙伴們

原文鏈接:http://blog.csdn.net/hanxueyu666/article/details/70236763

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 超时空要爱国语完整版在线 | 精品亚洲综合在线第一区 | 图片专区小说专区卡通动漫 | 暗卫调教女主肉高h | 久久偷拍国2017 | 性xxxx直播放免费 | 亚州在线播放 | 国产精品一区二区三区久久 | coolgay男男gayxxx chinese壮直男gay老年人 chinese野外gay军人 | 国产午夜亚洲精品理论片不卡 | 久久国内精品 | 日韩视频一区 | 小夫妻天天恶战 | 喜爱夜蒲2三级做爰 | 亚洲精品一区制服丝袜 | 国产乱码在线精品可播放 | 西西人体大胆77777视频 | 九九九九九九伊人 | 操破苍穹小说 | 秘书在办公室疯狂被hd | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 羞羞在线观看 | 精品久久久久久久久免费影院 | 亚洲欧美日韩精品久久亚洲区 | 精品网站| 天天做日日做天天添天天欢公交车 | 久久亚洲高清观看 | 日韩无砖2021特黄 | 久久精品观看 | 免费人成在线观看视频播放 | 成人精品一级毛片 | 丝袜护士强制脚足取精 | 34看网片午夜理 | 男人天堂2023 | 日韩一级片在线免费观看 | 视频在线观看入口一二三2021 | 69一级毛片 | 成人网18免费网站 | 精品欧美日韩一区二区三区 | 高h辣文小说网 烧书阁 | 美女脱得一二净无内裤全身的照片 |