十一、常用API——Object的clone()

本文详细解释了API文档中关于对象克隆的概念,包括浅克隆和深克隆的区别,以及如何通过重写`clone`方法和实现`Cloneable`接口来实现对象复制。特别强调了`Object`类的`clone`方法行为和可能出现的`CloneNotSupportedException`。

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

API文档解释:

创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。这样做的目的是,对于任何对象 x,表达式:

x.clone() != x

为 true,表达式:

x.clone().getClass() == x.getClass()

也为 true,但这些并非必须要满足的要求。一般情况下:

x.clone().equals(x)

为 true,但这并非必须要满足的要求。

按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()。

按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。

Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意,所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。

Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。

返回:

此实例的一个副本。

抛出:

CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口,则重写 clone 方法的子类也会抛出此异常,以指示无法复制某个实例。


对象克隆:

把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制

细节:

  • 方法在底层会帮我们创建一个对象,并把原对象中的数据拷贝过去。

书写细节:

  • 1.重写object中的clone方法
  • 2.让javabean类实现cloneable接口
  • 3.创建原对象并调用clone就可以了。

浅克隆:

  • 不管对象内部的属性是基本数据类型还是引用数据类型,都完全拷贝过来

深克隆:

  • 基本数据类型拷贝过来;
  • 字符串复用;
  • 引用数据类型会重新创建新的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值