Cloneable接口

前置知識

Java在處理對象和變量時是不同的.變量傳入函數(shù)實際上是引用傳入函數(shù)內,在函數(shù)內的變量和函數(shù)外傳入的變量會使用同一個內存實例中的對象.而基本類型則是會拷貝一份相同的值,相當于方法體內的局部變量.


代碼實現(xiàn)
public class Variables {
    private int value =4;
    private String str  ="init String";

    private void initMember(){
        this.value =456;
        this.str = "qwer";
    }

    public static void main(String[] args) {
        Variables variables = new Variables();
        variables.initMember();
        System.out.println(variables.value+"---"+variables.str);
    }
}
```
輸出結果
```
456---qwer
```

####Cloneable接口的實現(xiàn)
1 clone分為影子clone和深clone,影子克隆比如在對象中包含了一個變量時,那么這個對象的clone只復制了包含的變量引用.
2 clone的實現(xiàn)需要繼承Cloneable接口,然后重寫clone()方法.

#####代碼實現(xiàn)
```
//實現(xiàn)影子clone
public class CloneA implements Cloneable {
    private int anInt;
    public Object clone(){
        CloneA cloneA =null;
        try {
            cloneA = (CloneA)super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return cloneA;
    }
}
```
```
//實現(xiàn)深clone
public class DeepClone implements Cloneable {
    private String value;
    private CloneA cloneA;

    public Object clone() {
        DeepClone deepClone = null;
        try {
            deepClone = (DeepClone) super.clone();
          //該成員變量實現(xiàn)了Cloneable接口,進行clone
            deepClone.cloneA = (CloneA) cloneA.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return deepClone;
    }
}
```
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構造函數(shù)創(chuàng)建對象:僅僅是創(chuàng)建對象的方法,并非Fa...
    孫小磊閱讀 2,031評論 0 3
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,142評論 0 62
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,211評論 30 472
  • 《Effective Java》筆記(上) 對象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構造...
    OCNYang閱讀 2,626評論 2 17
  • 6 接口與內部類 后面將介紹Java的幾種常用的高級技術,掌握以完善自己的Java工具箱。 首先,接口(inter...
    我快要上天啦閱讀 468評論 0 1