当前位置:首页 > Java

java 如何克隆

2026-03-20 01:45:15Java

克隆的概念

在Java中,克隆(Clone)指创建一个对象的副本,新对象与原对象具有相同的属性值但内存地址不同。克隆分为浅克隆(Shallow Clone)和深克隆(Deep Clone)。

实现克隆的步骤

1. 实现 Cloneable 接口
类需实现 Cloneable 标记接口(无方法),否则调用 clone() 会抛出 CloneNotSupportedException

public class MyClass implements Cloneable {
    // 类定义
}

2. 重写 Object.clone() 方法
覆盖 clone() 方法并调用 super.clone(),返回类型改为当前类类型。

@Override
public MyClass clone() throws CloneNotSupportedException {
    return (MyClass) super.clone();
}

3. 浅克隆与深克隆的选择

  • 浅克隆:默认的 clone() 仅复制基本类型和对象引用(共享引用对象)。
  • 深克隆:需手动复制引用类型的成员变量,例如通过递归调用 clone() 或序列化。

深克隆示例

java 如何克隆

public class DeepCloneExample implements Cloneable {
    private List<String> data;

    @Override
    public DeepCloneExample clone() throws CloneNotSupportedException {
        DeepCloneExample cloned = (DeepCloneExample) super.clone();
        cloned.data = new ArrayList<>(this.data); // 手动复制引用对象
        return cloned;
    }
}

注意事项

  • 不可变对象:如 String 或包装类,无需深克隆。
  • 性能与复杂度:深克隆可能涉及递归,需谨慎处理循环引用。
  • 序列化替代方案:通过 ObjectOutputStreamObjectInputStream 实现深克隆(需类实现 Serializable)。

示例代码(完整流程)

class Person implements Cloneable {
    private String name;
    private Address address; // 引用类型

    @Override
    public Person clone() throws CloneNotSupportedException {
        Person cloned = (Person) super.clone();
        cloned.address = this.address.clone(); // 深克隆Address
        return cloned;
    }
}

class Address implements Cloneable {
    private String city;

    @Override
    public Address clone() throws CloneNotSupportedException {
        return (Address) super.clone();
    }
}

标签: java
分享给朋友:

相关文章

java如何输入数组

java如何输入数组

输入数组的方法 在Java中,可以通过多种方式输入数组,具体取决于输入源(如控制台、文件等)和数组类型(如基本类型或对象类型)。以下是几种常见的方法: 使用Scanner从控制台输入 对于基本数据类…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…

java如何创建数组

java如何创建数组

创建数组的基本方法 在Java中,数组是固定大小的同类型元素集合。创建数组需要声明数组类型并初始化。 声明数组 语法格式为 数据类型[] 数组名 或 数据类型 数组名[]: int[] arr1;…

如何编写java

如何编写java

编写Java程序的基本步骤 安装Java开发工具包(JDK),确保系统环境变量配置正确。可以从Oracle官网下载最新版本的JDK并进行安装。 选择一个合适的集成开发环境(IDE),如Eclipse…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…