java基础 ----- clone

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.         }  






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值