可以重載clone方法克隆對(duì)象
目前創(chuàng)新互聯(lián)已為上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、南丹網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
首先、該類(lèi)要實(shí)現(xiàn)Cloneable的接口,不然執(zhí)行clone方法的時(shí)候會(huì)拋出CloneNotSupportedException異常
然后、就在該類(lèi)重載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);
}
}
從樓主對(duì)回答的追問(wèn)上發(fā)現(xiàn),樓主的連JAVA基本的語(yǔ)法都很差啊。=號(hào)是賦值運(yùn)算符,不是比較。
double[] vectorValue;
vectorValue = vectorValue.clone();
這個(gè)段代碼執(zhí)行肯定報(bào)錯(cuò)了。但他還的意思還是很明確的。
首先:double[] vectorValue; ? 這個(gè)是定義了一個(gè)double類(lèi)型的數(shù)組變量vectorValue。
其次:vectorValue = vectorValue.clone(); ?//這個(gè)是將vectorValue 克隆一份,賦值給自己。也就是說(shuō)vectorValue變量指向了新的一塊內(nèi)存區(qū)域。
舉個(gè)例子可能更能說(shuō)明問(wèn)題。
public?class?TestMain?implements?Cloneable?{
private?int?i?;
public?TestMain(int?i){
this.i?=?i?;
}
@Override
protected?Object?clone()?{
//?TODO?Auto-generated?method?stub
return?new?TestMain(this.getI()+1);
}
public?int?getI()?{
return?i;
}
/**
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
TestMain?tm1?=?new?TestMain(1);
TestMain?tm2??=?tm1;
tm1?=?(TestMain)tm1.clone();
System.out.println(tm1.getI());?//tm1指向的是通過(guò)clone()方法創(chuàng)建的新的對(duì)象的地址,i的值已經(jīng)是2了。
System.out.println(tm2.getI());?//tm2指向的還是tm1創(chuàng)建時(shí)的地址,i的值為1
}
}
final只是不能修改內(nèi)部值,但是可以修改引用.你a=b.clone();已經(jīng)把a(bǔ)的引用給修改了!