Java 中的对象克隆 | clone() 方法

2025年3月22日 | 阅读 3 分钟

java构造函数 **对象克隆**是创建对象精确副本的一种方法。Object类的clone()方法用于克隆对象。

为了创建对象的克隆,我们想要创建的类**必须实现java.lang.Cloneable接口**。如果我们不实现Cloneable接口,clone()方法将生成**CloneNotSupportedException**。

**clone()方法**定义在Object类中。clone()方法的语法如下

为什么要使用clone()方法?

**clone()方法**节省了创建对象精确副本的额外处理任务。如果我们通过使用new关键字来实现,它将花费大量的处理时间来完成,这就是为什么我们使用对象克隆。

对象克隆的优点

尽管Object.clone()存在一些设计问题,但它仍然是一种流行且简单的复制对象的方式。以下是使用clone()方法的优点列表

  • 您无需编写冗长重复的代码。只需使用一个带有4到5行clone()方法的抽象类即可。
  • 这是复制对象的最简单、最高效的方法,特别是当我们将其应用于已开发或旧项目时。只需定义一个父类,在其上实现Cloneable,提供clone()方法的定义,任务就完成了。
  • Clone()是复制数组的最快方法。

对象克隆的缺点

以下是clone()方法的一些缺点列表

  • 要使用Object.clone()方法,我们需要更改代码中的许多语法,例如实现Cloneable接口,定义clone()方法并处理CloneNotSupportedException,最后,调用Object.clone()等。
  • 我们必须实现cloneable接口,即使它没有任何方法。我们只需要使用它来告诉JVM我们可以在我们的对象上执行clone()。
  • Object.clone()是受保护的,所以我们必须提供自己的clone()并在其中间接调用Object.clone()。
  • Object.clone()不调用任何构造函数,所以我们对对象构造没有任何控制。
  • 如果您想在子类中编写clone方法,那么它的所有超类都应该在它们中定义clone()方法,或者从另一个父类继承它。否则,super.clone()链将失败。
  • Object.clone()仅支持浅复制,但如果我们想要深复制,我们需要重写它。

Java中clone()方法的示例(对象克隆)

让我们看一个简单的对象克隆示例

示例

编译并运行

输出

101 amit
101 amit

如您在上面的示例中看到的,两个引用变量具有相同的值。因此,clone()将对象的值复制到另一个。所以我们不需要编写显式代码来将一个对象的值复制到另一个。

如果我们使用new关键字创建另一个对象并将另一个对象的值赋给它,这将需要对该对象进行大量处理。因此,为了节省额外的处理任务,我们使用clone()方法。

下一个主题Java Math