国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java的clone方法

2019-11-06 07:10:58
字體:
來源:轉載
供稿:網友

什么是"clone"?   在實際編程過程中,我們常常要遇到這種情況:有一個對象A,在某一時刻A中已經包含了一些有效值,此時可能 會需要一個和A完全相同新對象B,并且此后對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨立的對象,但B的初始值是由A對象確定的。在 java語言中,用簡單的賦值語句是不能滿足這種需求的。要滿足這種需求雖然有很多途徑,但實現clone()方法是其中最簡單,也是最高效的手段。    Java的所有類都默認繼承java.lang.Object類,在java.lang.Object類中有一個方法clone()。JDK API的說明文檔解釋這個方法將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 new操作符返回的新對象的區別就是這個拷貝已經包含了一些原來對象的信息,而不是對象的初始信息。   怎樣應用clone()方法?   一個很典型的調用clone()代碼如下: 

class CloneClass implements Cloneable{  public int aInt;  public Object clone(){   CloneClass o = null;   try{    o = (CloneClass)super.clone();   }catch(CloneNotSupportedException e){    e.PRintStackTrace();   }   return o;  } }

   有三個值得注意的地方,一是希望能實現clone功能的CloneClass類實現了Cloneable接口,這個接口屬于java.lang 包,java.lang包已經被缺省的導入類中,所以不需要寫成java.lang.Cloneable。另一個值得請注意的是重載了clone()方 法。最后在clone()方法中調用了super.clone(),這也意味著無論clone類的繼承結構是什么樣的,super.clone()直接或 間接調用了java.lang.Object類的clone()方法。下面再詳細的解釋一下這幾點。   應該說第三點是最重要的,仔細 觀察一下Object類的clone()一個native方法,native方法的效率一般來說都是遠高于java中的非native方法。這也解釋了為 什么要用Object中clone()方法而不是先new一個類,然后把原始對象中的信息賦到新對象中,雖然這也實現了clone功能。對于第二點,也要 觀察Object類中的clone()還是一個protected屬性的方法。這也意味著如果要應用clone()方法,必須繼承Object類,在 Java中所有的類是缺省繼承Object類的,也就不用關心這點了。然后重載clone()方法。還有一點要考慮的是為了讓其它類能調用這個clone 類的clone()方法,重載之后要把clone()方法的屬性設置為public。   那么clone類為什么還要實現 Cloneable接口呢?稍微注意一下,Cloneable接口是不包含任何方法的!其實這個接口僅僅是一個標志,而且這個標志也僅僅是針對 Object類中clone()方法的,如果clone類沒有實現Cloneable接口,并調用了Object的clone()方法(也就是調用了 super.Clone()方法),那么Object的clone()方法就會拋出CloneNotSupportedException異常。   以上是clone的最基本的步驟,想要完成一個成功的clone,還要了解什么是"影子clone"和"深度clone"。

學習Java的同學注意了!!! 學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入Java學習交流群,群號碼:523047986  我們一起學Java!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤水市| 商河县| 阳春市| 乌恰县| 射洪县| 鸡西市| 同德县| 荆门市| 莫力| 锦州市| 霞浦县| 昌图县| 云南省| 临沧市| 元谋县| 达州市| 礼泉县| 阳原县| 朝阳市| 温泉县| 沐川县| 木里| 安阳县| 英吉沙县| 丘北县| 阳高县| 巴楚县| 青川县| 聊城市| 泰宁县| 新平| 忻城县| 扶沟县| 罗山县| 竹山县| 绵阳市| 丽水市| 定安县| 新河县| 东平县| 逊克县|