Cloneable接口的作用

Cloneable接口的作用1.Cloneable接口Cloneable接口是标记型接口,它是内部没有方法和属性,实现Cloneable接口来表示该类可以被克隆,才可以调用Object.clone()方法对该类的实例进行按字段复制。如果在没有实现Cloneable接口的实例上调用Object.clone()方法,则会抛出CloneNotSupportedException(克隆不被支持)的异常。2.克隆的…

大家好,欢迎来到IT知识分享网。Cloneable接口的作用"

1.Cloneable接口

Cloneable接口是标记型接口,它是内部没有方法和属性,实现Cloneable 接口来表示该类可以被克隆,才可以调用Object.clone() 方法对该类的实例进行按字段复制。如果在没有实现Cloneable 接口的实例上调用Object.clone() 方法,则会抛出CloneNotSupportedException(克隆不被支持)的异常。

2.克隆的分类

 克隆分为深克隆和浅克隆。

浅克隆(shallow clone):浅克隆是指拷贝对象时仅仅copy对象本身和对象中的基本变量,而不拷贝对象包含的引用指向的对象。

深克隆(deep clone):不仅仅copy对象本身,而且copy对象包含的引用指向的所有对象。

 浅克隆:只需要调用Object中的clone() 方法。

public class Equalis implements Cloneable{
	public String name;
	public int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Equalis [name=" + name + ", age=" + age + "]";
	}

	protected Objec clone() throws CloneNotSupportedException {
		return (Equalis) super.clone();
		
	}
		
	}

 测试

public class EqualsTest {
	public static void main(String[] args) throws CloneNotSupportedException {
		
		
		Equalis e  = new Equalis();
		e.setName("张三");
		e.setAge(10);
		System.out.println(e.hashCode());
		Equalis e1 = e.clone();
		System.out.println(e1.hashCode());
	}

}

运行结果:118352462
                  1550089733

两者的hashcode值不同,说明clone() 方法并不是直接把e的引用直接赋给e1 ,而是在堆中重新开辟了一块空间,将e 复制过去,把新的地址返回给了e1。 

 深克隆:如果要进行深克隆则要进行重写Object 中的clone() 方法。

public Object clone() throws CloneNotSupportedException {  
        Test          test = new Test(this.test.userData);    
        double      data1 = this.data1;  
        String        data2 = new String(this.data2);  
        StringBuffer data3 = new StringBuffer(this.data3.toString());  
          
        CloneableClass copy = new CloneableClass(test, data1, data2, data3);  
        return copy;  
}

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/21262.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信