導航:首頁 > 編程語言 > java中的克隆

java中的克隆

發布時間:2023-06-16 10:17:16

java 如何復制對象

可以使用clone來實現,clone用於為引用類型的復制
1.使用clone方法的類必須先實現Cloneable介面,不然clone方法會直接返回CloneNotSupportedException不支持克隆的異常
2、實現Cloneable介面的類應該使用公共方法重寫 Object.clone(它是受保護的)。某個對象實現了此介面就克隆它是不可能的。即使 clone 方法是反射性調用的,也無法保證它將獲得成功。
3、在Java.lang.Object類中克隆方法是這么定義的:
protected Object clone()
throws CloneNotSupportedException
創建並返回此對象的一個副本。表明是一個受保護的方法,同一個包中可見。

② 關於java克隆對象

--在使用抄clone方法時,對於每一個類,都襲需要做如下判斷:
1--默認的clone方法是否能滿足要求
2--默認的clone方法是否能通過調用可變子對象的clone方法修補
3--是否不應該使用clone
----如選擇1和2,就必須實現Cloneable介面,使用public重定義clone方法
意思就是,你如果想用clone方法,首先要考慮Object的clone能不能滿足你的需求,如果可以,那好,直接調用,反之,你就得必須在需要使用clone方法的類中實現Cloneable介面,自己寫一個Clone規則。

③ java如何實現對象的克隆

可以重載clone方法克隆對象

首先、該類要實現Cloneable的介面,不然執行clone方法內的時候會拋出CloneNotSupportedException異常

然後容、就在該類重載clone方法,自己加上克隆的邏輯,本人小白,手敲的代碼

{

privateStringname;

publicBook(Stringname){
this.name=name;
}

@Override
publicBookclone(){
returnnewBook(this.name);
}
}

④ java里關於克隆的問題,所有類都是Object的子類何必在復寫clone方法

深度克隆的問題,如果類中成員包含集合類,如list等,或者包含map的,默認的clone方法為淺克隆,不會復制集合中的元素。如果復寫clone方法,則可根據需求來復製成員。

⑤ java中的淺克隆和深克隆是什麼

淺克隆:僅僅復制所克隆的對象,而不復制它所引用的對象。

被復製版對象的所有變數都含有與原來權的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。


深克隆:把要復制的對象所引用的對象都復制了一遍。

那些引用其他對象的變數將指向被復制過的新對象,而不再是原有的那些被引用的對象。


很明顯二者時間消耗有差距,在不影響的情況下盡量用淺克隆

注意區分與C語言的淺克隆深克隆 那個是引用地址與重新分配地址構建的區別,詳細可以參見:

http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

⑥ 如何進行Java對象的克隆

以數組對象的克隆為例。

Java程序

publicclassMain{
publicstaticvoidmain(String[]args){
int[]a={1,2,3};
int[]b=a.clone(); //b是a的克隆,a和b指向不同的數組
int[]c=a; //c是a的引用,a和c指向同一個數組

a[0]=10;

System.out.println("a[0]="+a[0]);
System.out.println("b[0]="+b[0]);
System.out.println("c[0]="+c[0]);
}
}


運行測試:

a[0]=10
b[0]=1
c[0]=10

自定義類的情況如下:

publicclassMain{
publicstaticvoidmain(String[]args){
Aa1=newA();
a1.name="Smith";

Aa2=a1;
Aa3=(A)a1.clone();

a1.name="White";

System.out.println("a1:"+a1.name);
System.out.println("a2:"+a2.name);
System.out.println("a3:"+a3.name);
}
}

classAimplementsCloneable{
publicStringname=null;

@Override
publicObjectclone(){
Aa=null;
try{
a=(A)super.clone();
}
catch(CloneNotSupportedExceptione){
e.printStackTrace();
}
returna;
}
}


運行測試:

a1:White
a2:White
a3:Smith

⑦ java中對象的克隆疑問

Object o1=new Object();
System.out.println(o1.hasCode());//列印o1的內存地址。
Object o2=new Object();
System.out.println(o2.hasCode());//列印o2的內存地址。
可見o1和o2擁有不同的內存數據,如果你讓o2=o1,那o1和o2的地址就一樣了,就是一個對象了,怎麼還叫克隆?
老祖宗Object類的clone方法是將一個對象的數據原封不動的復制到另一個對象中去,比如o2=o1.clone();就將o1的數據復制了一份考貝到了另一塊內存中,所以o2與o1地址不一樣但數據相同。
你這里的super.clone();就是調用的Object類的clone()方法,調用Object的方法不就是省得你自己寫了嗎。
你可能還會問Object既然有clone()方法,而所有的類都是Object類的子類,那所有的類不都有clone()方法嗎,干什麼還自己寫?Object類雖然有clone()方法,但是訪問控制符是protected而不是public,於是別的類不可見,所以你需要重寫它:

@Override
public Object clone(){
Object obj=null;
try {
obj= super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
而且你需要將你的類實現cloneable介面,這是必須的。

⑧ java里的克隆方法是什麼意思有實例嗎》

//實現表示可克隆
{
publicStringname;//名字
publicIntegerage;//年齡
publicStudent(Stringname,Integerage){
super();
this.name=name;
this.age=age;
}
publicStringgetName(){
returnthis.name;
}


publicstaticvoidmain(String[]args)throwsException{
Students=newStudent("張三",10);
Students_clone=(Student)s.clone();//克隆一個student
System.out.println(s_clone.getName());//輸出張三,跟原來的一樣

}

}

閱讀全文

與java中的克隆相關的資料

熱點內容
java監聽器延時 瀏覽:726
itunes備份包含微信聊天記錄 瀏覽:20
怎麼向虛擬機傳文件 瀏覽:677
win10怎麼用軟體激活不了 瀏覽:816
美版a1453是什麼版本 瀏覽:517
電腦里的文件夾按照拼音歸類 瀏覽:996
文件管理器怎麼把視頻壓縮成文件 瀏覽:477
標准化文件名稱包括哪些 瀏覽:85
win10不能讀取dll文件 瀏覽:882
雲騎士重裝系統找不到usb字樣文件 瀏覽:42
皖事通app社保年限在哪裡看 瀏覽:65
為什麼快影顯示沒網路 瀏覽:356
華為如何讓手機升級提醒紅1消失 瀏覽:345
我愛九九商城app 瀏覽:587
劍靈蒼穹武器升級 瀏覽:248
微信錢包微粒貸 瀏覽:654
滾動字幕屏找不到文件 瀏覽:990
鄭州青少年學編程哪個機構比較好 瀏覽:866
ps文件打開不是彩色的 瀏覽:781
監控硬碟格式化工具 瀏覽:512

友情鏈接