Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java cloneable

作者:—只賣身不賣藝   发布日期:2025-12-14   浏览:34

// 实现 Cloneable 接口并重写 clone 方法的示例

class Person implements Cloneable {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 重写 clone 方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    // Getter 和 Setter 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }

    public static void main(String[] args) {
        try {
            Person original = new Person("Alice", 30);
            System.out.println("Original: " + original);

            // 使用 clone 方法创建对象副本
            Person cloned = (Person) original.clone();
            System.out.println("Cloned: " + cloned);

            // 修改原始对象的属性,验证克隆对象是否独立
            original.setAge(31);
            System.out.println("After modifying original object:");
            System.out.println("Original: " + original);
            System.out.println("Cloned: " + cloned);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

解释说明:

  1. 实现 Cloneable 接口:为了使用 clone 方法,类需要实现 Cloneable 接口。这个接口本身没有定义任何方法,它只是一个标记接口,告诉 JVM 这个类支持克隆操作。

  2. 重写 clone 方法clone 方法默认是 protected 的,所以我们需要将其重写为 public 或保持 protected,以便可以在类内部或子类中调用。

  3. 浅拷贝 vs 深拷贝:上述代码实现了浅拷贝(shallow copy),即只复制对象的基本数据类型和引用类型的引用,而不复制引用类型指向的对象。如果需要深拷贝(deep copy),则需要手动复制引用类型的对象。

  4. CloneNotSupportedException 异常clone 方法可能会抛出 CloneNotSupportedException,因此需要捕获该异常。

  5. 测试克隆效果:通过修改原始对象的属性,验证克隆对象是否独立于原始对象。

上一篇:java游戏编程

下一篇:java中continue和break的区别

大家都在看

java判断是windows还是linux

java连接数据库的代码

java djl

ubuntu 卸载java

es java api

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站