java基础 ----- clone

在Java编程中,当对象赋值后属性改变导致对象间互相影响时,可以使用clone方法来创建对象的副本。调用clone()需要注意实现Cloneable接口并重写clone方法,避免CloneNotSupportedException异常。然而,Object的clone()仅实现影子克隆,对于内部引用类型的对象,需要进行深度克隆处理,如示例中对Date对象的处理。
摘要由CSDN通过智能技术生成

clone,克隆,记得以前在看api时第一次看到这个函数时还想呢,这啥玩意,估计又什么高深的玩意。。。。

然而在实际编码时会常常发现一个问题:java在除了基本类型变量赋值时,两个对象之间的赋值,常常其中一个属性改变后,另一个也就同时改变了,这常常不是我们想要的,我们只是想要对象A的全部属性,但是对象A,B成为连体人,还想能各自操作,互不影响,这个时候就要clone了


一个典型的调用clone()方法如下:

class CloneClass implements Cloneable{ 
 public int aInt; 
 public Object clone(){ 
  CloneClass o = null; 
  try{ 
   o = (CloneClass)super.clone(); 
  }catch(CloneNotSupportedException e){ 
   e.printStackTrace(); 
  } 
  return o; 
 } 
}

注意:

(1)super.close()返回的是Object对象,记得强转一下

(2)记得要实现Cloneable接口,Cloneable接口里面虽然不包含任何方法,但是可以当成一种标志看,然后再重载clone方法否则在调用super.clone()时会抛CloneNotSupportedException异常,

(3)Object里的clone()方法是protected的,重载的clone()要改为public的

(4)什么时候用clone(),主要看是基本类型还是参考类型的,如果是基本类型就不需要


但是Object的clone()方法,仅仅是影子克隆,如果类里面本身有一个对象仍不是基本类型变量,那还会存在上述的问题,那就需要我们的深度克隆出场了,比如上述类中有一个对象时  Date  date  = new  date(), 此时就需要对这个date语句做特殊处理

  1.         public Object clone() throws CloneNotSupportedException  
  2.         {  
  3.              Cloneclass cloned = (Cloneclasssuper.clone();  
  4.              cloned.date= (Date) date.clone()  
  5.              return cloned;  
  6.         }  






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值