关于Cloneable接口

本文围绕Cloneable接口展开,介绍了Object类中clone方法,其被native关键字标记,由第三方语言在JVM中实现,使用时可能抛出CloneNotSupportedException。指出Cloneable是标记接口,实现它才能重写clone方法,用于对象拷贝,还区分了浅拷贝和深拷贝的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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也就不相同,说明这两个句柄操作的不是同一个对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值