当前位置: 首页 > article >正文

JAVA 中的克隆对象

        克隆对象就是复制一个一模一样的对象,但是复制出来的对象和原对象不是同一个对象,是两个对象,只不过复制过来的对象和原对象除了内存地址之外,其它的属性一模一样。

在超类 Object 中有一个 clone() 方法:

protected native Object clone() throws CloneNotSupportedException;

        这里涉及到一个新的关键字 native,该关键字是与 C++ 联合开发的时候使用,纯 Java 的开发中并不会涉及到该关键字。如果一个方法中使用了 native 关键字,表示该方法是一个原生函数,也就是说这个方法是用 C++ 语言实现的,且被编译成了 DLL,由 Java 调用。

        该方法定义上有一个 CloneNotSupportedException 异常声明,如果我们要克隆的对象所属的类, 没有实现 Cloneable 接口,那么这个对象就不能克隆,此时进行克隆操作的时候就会报异常。

Cloneable 接口的源码:

public interface Cloneable {
}

        Cloneable 接口中没有定义任何内容,这样的接口我们称之为标识性接口,表示的是一种能力,即某个类如果实现了 Cloneable 接口,就表示该类类型的实例对象具备克隆能力。

示例:

public class Person implements Cloneable{

    private String name;
    private int age;

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

    /**
     * 重写 toString 方法
     * @return
     */
    @Override
    public String toString() {
        return "["+this.name + "," + this.age + "]";
    }

    /**
     * 重写克隆方法,修改访问权限
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}
public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person person1 = new Person("张三",11);
        Person person2 = (Person) person1.clone();
        System.out.println(person1 == person2);
        System.out.println(person1.toString());
        System.out.println(person2.toString());
    }
}

打印结果:


http://www.kler.cn/a/350118.html

相关文章:

  • 强化学习和QLearning及GAN到底是什么关系啊
  • SpringSecurity(一)——认证实现
  • 一区大黄蜂!人工蜂群算法优化!ABC-CNN-LSTM-MATT多特征分类预测
  • Jackson在Spring Boot中的开发技巧详解
  • 在顺序结构和链式结构的线性表上实现顺序检索算法
  • Ascend C算子编程和C++基础 Lesson3-4 性能优化
  • 流程图
  • Angular 实现 keep-alive (路由复用)
  • 鸿蒙应用,如何保存用户的 token
  • 【.net core使用minio大文件分片上传】.net core使用minio大文件分片上传以及断点续传、秒传思路
  • 构建可扩展的高校学科竞赛平台:SpringBoot案例分析
  • 2.2.ReactOS系统KSERVICE_TABLE_DESCRIPTOR结构体的声明
  • 基于Spring Boot REST API设计指南
  • 控制Stable Diffusion生成质量的多种方法
  • 水库大坝安全监测预警系统守护大坝安全卫士
  • 余 弦 曲 线
  • FineReport 动态列切换统计维度
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第10套
  • 【无标题】react组件封装
  • 图像按照X轴对称