java 中clone()的使用方法
java 中clone()的使用方法
前言:
clone就是復制, 在Java語言中, clone方法被對象調用,所以會復制對象。所謂的復制對象,首先要分配一個和源對象同樣大小的空間,在這個空間中創(chuàng)建一個新的對象。那么在java語言中,有:
1 使用new操作符創(chuàng)建一個對象
2 使用clone方法復制一個對象
那么這兩種方式有什么相同和不同呢? new操作符的本意是分配內(nèi)存。程序執(zhí)行到new操作符時, 首先去看new操作符后面的類型,因為知道了類型,才能知道要分配多大的內(nèi)存空間。分配完內(nèi)存之后,再調用構造函數(shù),填充對象的各個域,這一步叫做對象的初始化,構造方法返回后,一個對象創(chuàng)建完畢,可以把他的引用(地址)發(fā)布到外部,在外部就可以使用這個引用操縱這個對象。而clone在第一步是和new相似的, 都是分配內(nèi)存,調用clone方法時,分配的內(nèi)存和源對象(即調用clone方法的對象)相同,然后再使用原對象中對應的各個域,填充新對象的域, 填充完成之后,clone方法返回,一個新的相同的對象被創(chuàng)建,同樣可以把這個新對象的引用發(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
當類中包含一些對象的時候,我們就需要深復制,就是在對對象的復制之后,急著對對象中的非基本類型的屬性也調用clone方法完成深復制。
clone方法執(zhí)行的是淺拷貝
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
Java Web監(jiān)聽器如何實現(xiàn)定時發(fā)送郵件
這篇文章主要介紹了Java Web監(jiān)聽器如何實現(xiàn)定時發(fā)送郵件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-12-12
SpringBoot--- SpringSecurity進行注銷權限控制的配置方法
這篇文章主要介紹了SpringBoot--- SpringSecurity進行注銷,權限控制,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
SpringBoot使用Atomikos技術整合多數(shù)據(jù)源的實現(xiàn)
這篇文章主要介紹了SpringBoot使用Atomikos技術整合多數(shù)據(jù)源的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
SpringBoot通過參數(shù)注解自動獲取當前用戶信息的方法
這篇文章主要介紹了SpringBoot通過參數(shù)注解自動獲取當前用戶信息的方法,文中使用HandlerMethodArgumentResolver 類來實現(xiàn)這個功能,并通過代碼示例講解的非常詳細,需要的朋友可以參考下2024-03-03

