您好,登錄后才能下訂單哦!
clone()函數如何在java項目中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
clone就是復制, 在Java語言中, clone方法被對象調用,所以會復制對象。所謂的復制對象,首先要分配一個和源對象同樣大小的空間,在這個空間中創建一個新的對象。那么在java語言中,有:
1 使用new操作符創建一個對象
2 使用clone方法復制一個對象
那么這兩種方式有什么相同和不同呢? new操作符的本意是分配內存。程序執行到new操作符時, 首先去看new操作符后面的類型,因為知道了類型,才能知道要分配多大的內存空間。分配完內存之后,再調用構造函數,填充對象的各個域,這一步叫做對象的初始化,構造方法返回后,一個對象創建完畢,可以把他的引用(地址)發布到外部,在外部就可以使用這個引用操縱這個對象。而clone在第一步是和new相似的, 都是分配內存,調用clone方法時,分配的內存和源對象(即調用clone方法的對象)相同,然后再使用原對象中對應的各個域,填充新對象的域, 填充完成之后,clone方法返回,一個新的相同的對象被創建,同樣可以把這個新對象的引用發布到外部。
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();//創建 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方法執行的是淺拷貝
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。