Java中对象的克隆

  1. Cloneable的用途
    Cloneable是标记型的接口,它们内部都没有方法和属性,实现 Cloneable来表示该对象能被克隆,能使用Object.clone()方法。如果没有实现 Cloneable的类对象调用clone()就会抛出CloneNotSupportedException。
  2. 克隆的分类
    浅克隆(shallow clone),对基本类型的变量就是值克隆,对引用类型的变量就是克隆引用,并没有克隆出一个这个引用所指向的对象,这是有缺陷的。创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址
    深克隆(deep clone),不仅copy对象本身,而且copy对象包含的引用指向的所有对象。创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址
    总之深浅克隆都会在堆中新分配一块区域,区别在于对象属性引用的对象是否需要进行克隆(递归性的)
    clone()方法默认是浅克隆,需要自己在里面加一些东西
    克隆2步曲:
    1、你必须实现Cloneable接口。

2、你必须在类中重写clone()方法

浅克隆实现

public class Xx implements Cloneable{
	private Nn nn;
	 public Object clone() throws CloneNotSupportedException{
	 	return super.clone();
	 }
}

深克隆实现


    public class Nn implements Cloneable{
    	public Object clone() throws CloneNotSupportedException{
    		return super.clone();
    	}
    }
    public class Xx implements Cloneable{
    	public Object clone() throws CloneNotSupportedException{
    		Xx xx = (Xx) super.clone();
    		xx.nn = (Nn) super.clone();
    		return Xx;
    	}
    }

clone的源代码
1 public class Object {
2 protected native Object clone() throws CloneNotSupportedException;
3 }
native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值