java 中clone()的使用方法
java 中clone()的使用方法
前言:
clone就是復(fù)制, 在Java語(yǔ)言中, clone方法被對(duì)象調(diào)用,所以會(huì)復(fù)制對(duì)象。所謂的復(fù)制對(duì)象,首先要分配一個(gè)和源對(duì)象同樣大小的空間,在這個(gè)空間中創(chuàng)建一個(gè)新的對(duì)象。那么在java語(yǔ)言中,有:
1 使用new操作符創(chuàng)建一個(gè)對(duì)象
2 使用clone方法復(fù)制一個(gè)對(duì)象
那么這兩種方式有什么相同和不同呢? new操作符的本意是分配內(nèi)存。程序執(zhí)行到new操作符時(shí), 首先去看new操作符后面的類型,因?yàn)橹懒祟愋?,才能知道要分配多大的?nèi)存空間。分配完內(nèi)存之后,再調(diào)用構(gòu)造函數(shù),填充對(duì)象的各個(gè)域,這一步叫做對(duì)象的初始化,構(gòu)造方法返回后,一個(gè)對(duì)象創(chuàng)建完畢,可以把他的引用(地址)發(fā)布到外部,在外部就可以使用這個(gè)引用操縱這個(gè)對(duì)象。而clone在第一步是和new相似的, 都是分配內(nèi)存,調(diào)用clone方法時(shí),分配的內(nèi)存和源對(duì)象(即調(diào)用clone方法的對(duì)象)相同,然后再使用原對(duì)象中對(duì)應(yīng)的各個(gè)域,填充新對(duì)象的域, 填充完成之后,clone方法返回,一個(gè)新的相同的對(duì)象被創(chuàng)建,同樣可以把這個(gè)新對(duì)象的引用發(fā)布到外部。
package test;
public class Cloneoo {
public static void main(String[] args) {
test t=new test();
t.changeInt();
System.out.println(t);
try {
test t1=(test) t.clone();//創(chuàng)建
System.out.println(t1);
System.out.println(t1.getI());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class test implements Cloneable{
private int i=0;
public void setI(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void changeInt(){
this.i=1;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
test t=null;
t=(test) super.clone();
return t;
}
}
test.test@15db9742 test.test@6d06d69c 1
當(dāng)類中包含一些對(duì)象的時(shí)候,我們就需要深復(fù)制,就是在對(duì)對(duì)象的復(fù)制之后,急著對(duì)對(duì)象中的非基本類型的屬性也調(diào)用clone方法完成深復(fù)制。
clone方法執(zhí)行的是淺拷貝
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
Java Web監(jiān)聽(tīng)器如何實(shí)現(xiàn)定時(shí)發(fā)送郵件
這篇文章主要介紹了Java Web監(jiān)聽(tīng)器如何實(shí)現(xiàn)定時(shí)發(fā)送郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
SpringBoot--- SpringSecurity進(jìn)行注銷權(quán)限控制的配置方法
這篇文章主要介紹了SpringBoot--- SpringSecurity進(jìn)行注銷,權(quán)限控制,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Java經(jīng)驗(yàn)點(diǎn)滴:類注釋文檔編寫方法
Java經(jīng)驗(yàn)點(diǎn)滴:類注釋文檔編寫方法...2006-12-12
java實(shí)現(xiàn)馬踏棋盤算法(騎士周游問(wèn)題)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)馬踏棋盤算法,解決騎士周游問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法
這篇文章主要介紹了SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法,文中使用HandlerMethodArgumentResolver 類來(lái)實(shí)現(xiàn)這個(gè)功能,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03
java連接orcale數(shù)據(jù)庫(kù)示例分享
這篇文章主要介紹了java連接orcale數(shù)據(jù)庫(kù)示例,需要的朋友可以參考下2014-02-02

