激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

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

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

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

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

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

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

     1. Clone&Copy

     假設(shè)現(xiàn)在有一個Employee對象,Employee tobby =new Employee(“CMTobby”,5000),通
常我們會有這樣的賦值Employee cindyelf=tobby,這個時候只是簡單了copy了一下reference,cindyelf和tobby都指向內(nèi)存中同一個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時對其是一無所知的,它僅僅是簡單地執(zhí)行域?qū)τ虻腸opy,這就是Shallow Clone。

這樣,問題就來了咯,以Employee為例,它里面有一個域hireDay不是基本型別的變量,而是一個reference變量,經(jīng)過Clone之后就會產(chǎn)生一個新的Date型別的reference,它和原始對象中對應(yīng)的域指向同一個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對象,原理可以參考我前面關(guān)于public、protected、private的學(xué)習(xí)筆記。

4. Clone()方法的使用

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

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天使萌一区二区三区免费观看 | 一级毛片电影院 | 欧美激情区 | 久久久国产一区二区三区 | 久久在线观看 | 欧美国产日韩在线 | 色无极影院亚洲 | 在线1区| 国产69精品久久久久久久久久 | 久久久tv | 性猛aa久久久 | 国产chinesehd精品91 | 亚洲午夜电影 | 欧洲成人一区二区 | a视频在线免费观看 | 曰韩一级片| 成人毛片视频在线观看 | 91看片王| 国产日韩在线观看视频 | 欧美特一级片 | 91一区二区在线观看 | 日本在线一区二区 | 亚洲国产精品久久久久婷婷老年 | 日日爱影院 | 欧美日韩国产成人在线观看 | 日本欧美一区二区三区视频麻豆 | 羞羞视频免费网站 | 精品国产一区二 | 中文字幕爱爱视频 | 一级黄色在线观看 | 美女黄影院 | 免费黄色片网站 | 天天好比网 | 一区二区三区视频在线观看 | 国产精品视频导航 | 国内精品免费一区二区2001 | 污视频在线免费播放 | 国产精品久久久免费看 | 91成人午夜性a一级毛片 | 露脸各种姿势啪啪的清纯美女 | 国产精品视频二区不卡 |