JDK源码阅读——java.lang.Cloneable

本文详细介绍了Java中的Cloneable接口,解释了其实现的目的及其在Object.clone()方法中的作用。此外,还探讨了实现该接口的类如何重写clone()方法,并讨论了浅克隆与深克隆的区别。

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

接口

Cloneable

1. 概述:

public interface Cloneable
此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。
如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。
按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。

2. 源码阅读

    public interface Cloneable {
}

public class Object {
    protected native Object clone() throws CloneNotSupportedException;
}

3. 总结

此类实现了Cloneable接口,以指示Object的clone()方法可以合法地对该类实例进行按字段复制
如果在没有实现Cloneable接口的实例上调用Object的clone()方法,则会导致抛出CloneNotSupporteddException
按照惯例,实现此接口的类应该使用公共方法重写Object的clone()方法,Object的clone()方法是一个受保护的方法
创建并返回此对象的一个副本。对于任何对象x,表达式:
(1)x.clone() != x为true
(2)x.clone().getClass() == x.getClass()为true
(3)x.clone().equals(x)一般情况下为true,但这并不是必须要满足的要求

浅克隆(shallow clone)和深克隆(deep clone)反映的是,当对象中还有对象的时候,那么:
1、浅克隆,即很表层的克隆,如果我们要克隆对象,只克隆它自身以及它所包含的所有对象的引用地址
2、深克隆,克隆除自身对象以外的所有对象,包括自身所包含的所有对象实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值