java clone()是什么,讓我們一起了解一下?
clone()屬于clone中的一種,有淺克隆和深克隆。在Java中,clone方法被對象調(diào)用,所以會復(fù)制對象,所謂的復(fù)制對象,首先要分配一個和源對象同樣大小的空間,在這個空間中創(chuàng)建一個新的對象。
要想了解clone(),首先要知道clone方法是什么?
clone方法是返回與當(dāng)前對象的一個副本對象,可以通過操作副本對象而不影響當(dāng)前對象。使用clone方法需要實現(xiàn)Cloneable接口,并重寫Object方法中的clone方法。
需要注意的是在clone在Object中是project修飾符。因為所有類都是Object的子類,所以如果不實現(xiàn)clone方法,在類中可以直接使用父類的clone方法,但是其對象在別的類中不能調(diào)用clone方法。所以必須重寫clone方法。
那clone()在java應(yīng)用中扮演者什么角色?(以淺克隆為例)
1、被復(fù)制的類需要實現(xiàn)Clonenable接口(不實現(xiàn)的話在調(diào)用clone方法會拋出CloneNotSupportedException異常), 該接口為標(biāo)記接口(不含任何方法)。
2、覆蓋clone()方法,訪問修飾符設(shè)為public。方法中調(diào)用super.clone()方法得到需要的復(fù)制對象。
具體操作代碼如下:
class?Student?implements?Cloneable{?? ????private?int?number;?? ?? ????public?int?getNumber()?{?? ????????return?number;?? ????}?? ?? ????public?void?setNumber(int?number)?{?? ????????this.number?=?number;?? ????}?? ?????? ????@Override?? ????public?Object?clone()?{?? ????????Student?stu?=?null;?? ????????try{?? ????????????stu?=?(Student)super.clone();?? ????????}catch(CloneNotSupportedException?e)?{?? ????????????e.printStackTrace();?? ????????}?? ????????return?stu;?? ????}?? }?? public?class?Test?{?? ????public?static?void?main(String?args[])?{?? ????????Student?stu1?=?new?Student();?? ????????stu1.setNumber(12345);?? ????????Student?stu2?=?(Student)stu1.clone();?? ?????????? ????????System.out.println("學(xué)生1:"?+?stu1.getNumber());?? ????????System.out.println("學(xué)生2:"?+?stu2.getNumber());?? ?????????? ????????stu2.setNumber(54321);?? ?????? ????????System.out.println("學(xué)生1:"?+?stu1.getNumber());?? ????????System.out.println("學(xué)生2:"?+?stu2.getNumber());?? ????}?? }
輸出結(jié)果:
學(xué)生1:12345?? 學(xué)生2:12345?? 學(xué)生1:12345?? 學(xué)生2:54321
以上就是小編今天的分享了,希望可以幫助到大家。