本文目錄一覽:
java如何實現對象的克隆
可以重載clone方法克隆對象
首先、該類要實現Cloneable的介面,不然執行clone方法的時候會拋出CloneNotSupportedException異常
然後、就在該類重載clone方法,自己加上克隆的邏輯,本人小白,手敲的代碼
public class Book implement Cloneable{
private String name;
public Book(String name){
this.name=name;
}
@Override
public Book clone() throws CloneNotSupportedException {
return new Book(this.name);
}
}
關於java克隆對象
–在使用clone方法時,對於每一個類,都需要做如下判斷:
1–默認的clone方法是否能滿足要求
2–默認的clone方法是否能通過調用可變子對象的clone方法修補
3–是否不應該使用clone
—-如選擇1和2,就必須實現Cloneable介面,使用public重定義clone方法
意思就是,你如果想用clone方法,首先要考慮Object的clone能不能滿足你的需求,如果可以,那好,直接調用,反之,你就得必須在需要使用clone方法的類中實現Cloneable介面,自己寫一個Clone規則。
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介面,這是必須的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286337.html