关于Cloneable接口

Cloneable接口的理解与使用

1.Cloneable接口的作用

首先我们看一下Object类里面的clone方法:
Object类的clone方法
首先我们可以看到clone方法是被native关键字标记的一个方法,native修饰的是一个空方法,但是和abstract修饰的不一样,abstract修饰表示我们需要在具体的实现类中实现这个方法,native方法表示这个方法不是由Java实现的,而是由第三方语言实现的,他们会在JVM中由一个具体的实现体。

其次我们在看该方法抛出的异常,CloneNotSupportedException,翻译过来就是clone这个方法不支持,所以你在使用的时候可能会抛出一个异常。

这个时候我们就应该知道,要使用这个方法就必须回到我们的主题Cloneable接口,Cloneable接口其实是一个标记接口,只有实现了这个接口才能重写clone方法。

实现clone方法的作用就是为了拷贝对象。对象的拷贝分两种,一种潜拷贝,一种深拷贝

浅拷贝:
定义一个person类
person
在定义一个Home类:
home类
测试类:
测试类
输出:
输出
这个时候,我们发现Home对象的HashCode是不一样的,说明这是两个不同的对象,但是Person对象的HashCode是相同的,表示这是一个对象,原因就是Home类是实现了Cloneable接口,重写clone方法。
例如:
ClassName c = new ClassName();
ClassName c2 = c;
这种方式c和c2的hashCode是相同的,他只是复制了句柄,这两个句柄操作的是同一个对象。与这个类实现Cloneable接口无关

但是实现了Cloneable接口,使用clone方法的时候,会重新开辟内存空间,这两个HashCode也就不相同,说明这两个句柄操作的不是同一个对象。

发布了6 篇原创文章 · 获赞 0 · 访问量 106

猜你喜欢

转载自blog.csdn.net/Chenpeng02/article/details/95449089