Cloneable接口

前置知識(shí)

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


代碼實(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);
    }
}
```
輸出結(jié)果
```
456---qwer
```

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

#####代碼實(shí)現(xiàn)
```
//實(shí)現(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;
    }
}
```
```
//實(shí)現(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();
          //該成員變量實(shí)現(xiàn)了Cloneable接口,進(jìn)行clone
            deepClone.cloneA = (CloneA) cloneA.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return deepClone;
    }
}
```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容