当前位置:首页 > 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实现php

java实现php

Java 实现 PHP 功能的方法 在 Java 中实现 PHP 的功能通常涉及以下几个方面:字符串处理、Web 开发、数据库操作等。以下是几种常见需求的实现方法。 字符串处理 PHP 中的字符串处…

java js实现转盘抽奖

java js实现转盘抽奖

实现转盘抽奖的步骤 HTML结构 创建转盘抽奖的基本HTML结构,包括转盘区域和抽奖按钮。 <div id="wheel"> <canvas id="wheelCanv…

java如何输入

java如何输入

使用 Scanner 类进行输入 Scanner 是 Java 中最常用的输入工具,位于 java.util 包中。它可以读取用户的键盘输入或文件内容。 import java.util.Scann…

java如何安装

java如何安装

安装Java的步骤 下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本进行下载。推荐下载最新稳定版本以确保兼容性和安全性。 运行安装程序…

java如何编译

java如何编译

安装JDK 确保已安装Java Development Kit(JDK)。可通过命令行输入javac -version验证。若未安装,需从Oracle官网或OpenJDK下载对应版本的JDK并配置环境…

如何配置java

如何配置java

安装Java开发工具包(JDK) 访问Oracle官网或OpenJDK网站下载适合操作系统的JDK版本。选择与系统架构匹配的安装包(如Windows x64、macOS ARM等)。运行安装程序并遵循…