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

首頁 > 學院 > 開發設計 > 正文

java克隆詳述

2019-11-18 11:37:12
字體:
來源:轉載
供稿:網友

經常聽到有人說java中沒有指針。事實如此嗎?no,java是有指針的,只不過換了個名字而已,也就是我們經常提到的引用。我們知道,在java中一切都是對象,那么我們如何操控對象?如何在成千上萬的對象中找到我們所需的那個對象呢?又是如何讓對象按照我們的意思來完成任務的呢?

Objecto=newObject();

這是java中最常見的語句了,在這句話中做了三件事。首先聲明一個Object類型的變量o,在內存中為對象劃分一塊地址newObject(),將聲明的變量指向內存中的對象。如此一來,我們就可以通過o來操縱對象了。就似乎孩子們玩的遙控飛機,在空中飛行的是飛機,而使它做出美麗動作的卻是孩子們手中的搖控器。

"克隆"是如今聽到的較多的詞匯,聽說已經將某只羊克隆了好幾份了。但愿這種技術不要在人身上實驗。java中也有"克隆",與現實世界的克隆一樣,將一個實際存在的對象拷貝幾份。如下:

//倒霉的羊

publicclassSheepimplementsCloneable{

PRivateStringname;

publicvoidsetName(Stringarg){

name=arg;

}

publicStringgetName(){

returnname;

}

publicObjectclone()throwsCloneNotSupportedException{

returnsuper.clone();

}

}

//克隆

publicclassMain{

publicstaticvoidmain(String[]args)throwsCloneNotSupportedException{

Sheepsheep=newSheep();//先得到那只羊的實例

sheep.setName("我是真的");//給它做個記號

System.out.println("sheep.getName()="+sheep.getName());

SheepsheepClone=(Sheep)sheep.clone();//開始克隆

System.out.println("sheepClone.getName()="+sheepClone.getName());

}

}

運行程序結果為:

sheep.getName()=我是真的

sheepClone.getName()=我是真的

兩只羊是一模一樣的(哪怕那只羊瘸腿)。讓我們來看看代碼。首先要注重的是Sheep類實現了Cloneable接口(該接口屬于java.lang包,默認已經導入了),該接口中并沒有定義要實現的方法,是個空接口,起標志作用。也就是說,實現了這個接口的羊就不再是只普通的羊,它是一只可以被克隆的羊。再往下看,有個clone方法,返回Object類型的對象,并拋出CloneNotSupportedException異常。該方法覆寫了父類(Object)的clone方法,并在最后調用了super.clone(),這也意味著無論clone類繼續結構是什么樣的,super.clone()都會直接或間接調用Object類的clone()方法。看看jdk幫助文檔會發現,Object類的clone()是一個native方法,我們知道,native方法的效率一般來說都是遠高于java中的非native方法。這也說明了new一個對象,然后將原對象中的數據導入到新創建的對象中去的做法是多么愚蠢。必須說明的是Object中的clone方法是protected的,所以要使用clone就必須繼續Object類(默認)。并且為了可以使其它類調用該方法,必須將其作用域設置為public。

以上只是一個簡單clone的實現。明天說說"影子clone"和"深度clone"。

夜,深了。

QQ病毒

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邯郸市| 乡宁县| 台北市| 昌邑市| 县级市| 边坝县| 安多县| 仁布县| 玉林市| 西和县| 维西| 嵩明县| 弥渡县| 繁峙县| 宁乡县| 河北区| 米脂县| 台东市| 桐柏县| 济源市| 金湖县| 岢岚县| 芦山县| 罗山县| 长宁县| 清河县| 太湖县| 波密县| 凤山市| 孟津县| 平原县| 鹤壁市| 梧州市| 大石桥市| 余姚市| 泉州市| 鹿邑县| 铁力市| 广州市| 万载县| 奉贤区|