java克隆

Java的克隆 在了解克隆之前,要先了解Object的Clone()函数:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;(1)浅度克隆:Object中的克隆方法是浅度克隆,JDK规定了克隆需要满足的一些条件,简要总结一下就是:对某个对象进行克隆,对象的的成员变量如果包括引用类型或者数组,* 那么克隆的时候其实是不会把这些对象也带着复制到克隆出来的对象里面的,只是复制一个引用,这个引用指向被克隆对象的成员对象,因此,原始对象及其副本引用同一个对象。 阅读详情

什么是克隆

java的克隆类似于对象的复制。

为什么需要克隆

想对一个对象进行处理,且保留原有的对象。
比如根据一个叫张三的学生信息,复制出李四、王五的学生信息,且保留张三的学生信息,然后组装三个学生的List。

java克隆分类

java克隆分为浅克隆与深克隆。

  1. 浅克隆:只克隆基本类型。引用类型没有克隆,只是新建一个引用,该引用仍然指向原有的对象。比如张三的学生信息中,有老师这个引用对象。克隆张三的学生信息修改成李四的信息后,老师信息并未被克隆,修改张三的老师,李四的老师也被修改。
  2. 深克隆:基本类型和引用类型都被克隆,引用类型的变量指向的是新克隆的对象。

下面上代码实例,为了保险起见,咱们上三层嵌套。Student里有Teacher,Teacher里有Course。

浅克隆

  1. Student代码
package org.ludk.clone;

/**
 * @author ludengke
 * @title: Student
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/1822:13
 */
public class Student implements Cloneable{
    private String name;
    private int age;
    private  Teacher teacher;

    public Student(String name, int age, Teacher teacher) {
        this.name = name;
        this.age = age;
        this.teacher = teacher;
    }

    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;
    }

    public Teacher getTeacher() {
        return teacher;
    }

    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

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

  1. Teacher代码
package org.ludk.clone;

/**
 * @author ludengke
 * @title: Teacher
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/1822:14
 */
public class Teacher implements Cloneable{
    private String name;
    private int age;
    private Course course;

    public Teacher(String name, int age, Course course) {
        this.name = name;
        this.age = age;
        this.course = course;
    }

    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;
    }

    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
        this.course = course;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

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


  1. Course代码
package org.ludk.clone;

/**
 * @author ludengke
 * @title: Course
 * @projectName springcloud-demo
 * @description: TODO
 * @date 2021/10/1822:15
 */
public class Course {
    private String name;
    private int days;

    public Course(String name, int days) {
        this.name = name;
        this.days = days;
    }

    public String getName() {
        return name;
    }

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

    public int getDays() {
        return days;
    }

    public void setDays(int days) {
        this.days = days;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public String toString() {
        return "Course{" +
                "name='" + name + '\'' +
                ", days=" + days +
                '}';
    }
}


  1. 测试类代码
package org.ludk.clone;

/**
 * @author ludengke
 * @title: TestClone
 * @projectName springcloud-demo
 * @description: 克隆学习测试类
 * @date 2021/10/1719:12
 */
public class TestClone implements Cloneable{
    /**
     * main方法
     * @param args
     */
    public static void main(String[] args) throws CloneNotSupportedException {
        //新建个学生张三
        Student student=new Student("张三",24,new Teacher("王老师",40,new Course("英语",90)));
        //克隆学生
        Student cloneStudent=(Student) student.clone();
        System.out.println("学生张三和克隆学生是否为一个老师");
        System.out.println(student.getTeacher()==cloneStudent.getTeacher());
        System.out.println("学生张三和克隆学生是否为一个课程");
        System.out.println(student.getTeacher().getCourse()==cloneStudent.getTeacher().getCourse());
        System.out.println("学生张三的信息");
        System.out.println(student);
        //克隆学生的信息
        System.out.println("克隆学生的信息");
        System.out.println(cloneStudent);
    }
}


  1. 测试类执行结果
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=62957:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.clone.TestClone
学生张三和克隆学生是否为一个老师
true
学生张三的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}
克隆学生的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}

Process finished with exit code 0


从上面的例子,可以看到学生信息被复制了,但是里面的Teacher信息仍然是一个,仍然是一个对象。

深克隆

深克隆有两种方法。一种是遇到属性为引用类型,则对该引用类型对象进行复制。另一种是用序列化实现深克隆。

第一种方法性能高些,但是实现起来复杂,因为对象里可能还嵌套对象。第二种方法实现起来简单,但是性能差些。

自定义深克隆
  1. 修改Student的clone方法
@Override
    protected Object clone() throws CloneNotSupportedException {
        Student cloneStudent= (Student)super.clone();
        cloneStudent.setTeacher((Teacher) this.getTeacher().clone());
        return cloneStudent;
    }
  1. 再次跑测试类的结果
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=50882:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.clone.TestClone
学生张三和克隆学生是否为一个老师
false
学生张三的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}
克隆学生的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}

Process finished with exit code 0

其实上面的自定义深克隆方法只是深克隆了老师的信息,课程的信息依然为浅克隆。可以自己实现,继续扩展。

java序列化实现深克隆
  1. Teacer、Student、Course都得实现java.io.Serializable接口
  2. 修改Student的clone方法
 @Override
    protected Object clone() throws CloneNotSupportedException {
        Student cloneObj = null;
        try {
            // 写入字节流
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream obs = new ObjectOutputStream(out);
            obs.writeObject(this);
            obs.close();
            // 分配内存,写入原始对象,生成新对象
            ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(ios);
            // 返回生成的新对象
            cloneObj = (Student) ois.readObject();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cloneObj;
    }
  1. 重新跑测试类的结果
D:\work\java\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=55660:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\java\jre\lib\charsets.jar;D:\work\java\jre\lib\deploy.jar;D:\work\java\jre\lib\ext\access-bridge-64.jar;D:\work\java\jre\lib\ext\cldrdata.jar;D:\work\java\jre\lib\ext\dnsns.jar;D:\work\java\jre\lib\ext\jaccess.jar;D:\work\java\jre\lib\ext\jfxrt.jar;D:\work\java\jre\lib\ext\localedata.jar;D:\work\java\jre\lib\ext\nashorn.jar;D:\work\java\jre\lib\ext\sunec.jar;D:\work\java\jre\lib\ext\sunjce_provider.jar;D:\work\java\jre\lib\ext\sunmscapi.jar;D:\work\java\jre\lib\ext\sunpkcs11.jar;D:\work\java\jre\lib\ext\zipfs.jar;D:\work\java\jre\lib\javaws.jar;D:\work\java\jre\lib\jce.jar;D:\work\java\jre\lib\jfr.jar;D:\work\java\jre\lib\jfxswt.jar;D:\work\java\jre\lib\jsse.jar;D:\work\java\jre\lib\management-agent.jar;D:\work\java\jre\lib\plugin.jar;D:\work\java\jre\lib\resources.jar;D:\work\java\jre\lib\rt.jar;D:\work\springcloud-demo\target\classes org.ludk.clone.TestClone
学生张三和克隆学生是否为一个老师
false
学生张三和克隆学生是否为一个课程
false
学生张三的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}
克隆学生的信息
Student{name='张三', age=24, teacher=Teacher{name='王老师', age=40, course=Course{name='英语', days=90}}}

Process finished with exit code 0

从上面的例子可以看到,java序列化实现深克隆,那是真的深克隆。

参考

下面是引用https://www.cnblogs.com/xzwblog/p/7230788.html博客的图片

  • 浅克隆

在这里插入图片描述

  • 深克隆
    在这里插入图片描述
别再只调陀螺仪了!用OpenCV实现基于透视变换的EIS防抖,实测效果媲美手机 本文深入探讨了基于透视变换的EIS电子稳像技术,通过OpenCV实现高阶防抖算法,效果媲美主流手机厂商方案。详细解析了传统旋转平移模型的局限性,并展示了透视变换在复杂场景下的优势,包括数学原理、OpenCV实战代码及性能优化技巧,为视频防抖提供了专业解决方案。 阅读详情

相关推荐

从流量到凭证:实战解析SMB协议中的NTLMv2/v1哈希提取与破解

本文详细解析了SMB协议中NTLMv2/v1哈希的提取与破解实战技巧。从流量捕获、哈希格式处理到Hashcat高效破解,提供了一套完整的操作指南。文章特别强调了NTLMv2和NTLMv1哈希的区别及处理要点,并分享了防护建议与检测方法,帮助安全人员提升渗透测试效率。

weixin_30642561的博客 116

Java中常见的创建对象几种方式

常见的有4中方式 1.使用new关键字

qq_36357670的博客 541

华为2024机考真题集合

2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以 2,所得的结果就是中位数。在实际考试中会随机抽三道题目进行考察,其中两道100分卷题和一道200分卷题,总共400分。幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。1.众数是指一组数据中出现次数量多的那个数,众数可以是多个。

qq_25360769的博客 5092

【Java编程进阶之路 05】深入探索:Java中的浅克隆与深克隆的原理与实现

在Java中,克隆是创建对象副本的过程。浅克隆复制对象本身及其非静态字段,但对于引用类型的字段仅复制引用而不复制对象。深克隆则递归地复制对象及其所有引用的对象,确保副本完全独立于原始对象。实现深克隆可通过序列化或自定义方法完成,需处理循环引用和特殊字段。理解并正确选择克隆类型对于确保对象行为至关重要。

weixin_40736233的博客 1637

基于PyTorch的BP神经网络PID控制器动态调参实战

本文详细介绍了基于PyTorch的BP神经网络PID控制器动态调参实战,结合BP神经网络的自适应能力和PID控制算法的经典优势,实现工业控制中的高效参数调整。通过PyTorch实现BP-PID融合架构,包括网络设计、损失函数优化及动态调参技巧,显著提升控制性能,适用于温度控制、电机控制等场景。

weixin_29094775的博客 520

IGV新手必看:5分钟搞定ChIP-seq/DAP-seq/ATAC-seq数据可视化(附常见报错解决方案)

本文为IGV新手提供了一份快速上手的实战指南,详细讲解了如何高效完成ChIP-seq、DAP-seq、ATAC-seq等数据的可视化。内容涵盖软件安装、基因组导入、文件格式转换与优化,并重点剖析了“导入后一片空白”等常见报错的根本原因与解决方案,帮助用户在5分钟内避开雷区,生成可用于发表的IGV专业图谱。

weixin_29198045的博客 538

Java中的深克隆和浅克隆的原理及三种方式实现深克隆

本文详细介绍了Java中的浅克隆和深克隆的概念,及案例演示如何实现深克隆!

终生学习践行者 5422

几何修复_ANSYS流体分析:几何前处理

建模及几何处理工具非常多,选择起来让人眼花缭乱。对于仿真而言,高效的对几何进行清理及生成符合仿真要求的几何至关重要。ANSYS SpaceClaim Direct Modeler是基于直接建模思想的新一代3D高效率建模和几何编辑修补软件。SCDM提供了当今最快速、最富有创意的直接建模解决方案。由于它的直接建模能力即使对于导入的其它3D模型(如catia、proe、solid works创建的几何)...

weixin_35778830的博客 2416

Java 克隆技术详解,深拷贝与浅拷贝的区别及实现

克隆是指创建一个对象的副本,使得新创建的对象在内容上与原始对象相同。在编程中,克隆是常用的技术之一,它具有以下几个重要用途和优势:复制对象:使用克隆可以创建一个与原始对象相同的新对象,包括对象的属性和状态。这样可以在不影响原始对象的情况下,对新对象进行修改、操作、传递等。这在某些场景下非常有用,可以避免重新创建和初始化一个对象。隔离性与保护:通过克隆,可以创建一个独立于原始对象的副本。这样,修改克隆对象时,不会影响到原始对象,从而实现了对象之间的隔离性。

兴趣是最好的老师,勤能补拙 1553

解读MTF曲线

怎样看MTF曲线 光学模量传递函数所表示的就是模量传递函数值随空间频率和像场位置变化的函数关系。它有很多种类型, 但最主要的两种类型就是MTF值与空间频率的关系和与像场半径(或像场角)之间的关系。 1、什么是空间频率 在讲清MTF曲线随空间频率的变化关系以前,我们先来弄明白什么叫“空间频率”。 空间频率(Spatial Frequency)的概念与分辨率的概念非常相似,单位都是“线对/毫米”(lp/mm)。但测试分辨率的标板是一组一组轮廓鲜明的黑白线条,每两条线条之间的距离,以及线条本身的宽度之比是.

camerall 1万+

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

java中浅克隆与深克隆解析

文章目录简介浅克隆深克隆嵌套使用clone()方法序列化方式浅克隆和深克隆的比较 简介 所谓克隆,就是指依照已存在的数据,复制出一份一样的数据。 java中的克隆有浅克隆和深克隆之分,造成这种区别是因为java中对于基本数据类型和引用类型类型的存储是不一样的,基本数据类型存储在栈中,而引用数据类型存储在堆中,因此造成了在克隆时的不同操作。 实现克隆的方法可以按照三步进行: 实现Clonable接口; 重写clone()方法。 调用clone()方法克隆对象。 浅克隆 package test; imp

1+1=王的博客 4599

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Java】浅克隆、深克隆

步骤如下1、重写Object中的clone()方法2、让JavaBean类实现Cloneable接口3、创建原对象并调用clone()即可在Java中有两种克隆方式:浅克隆 和 深克隆浅克隆:不管对象内部的属性是基本数据类型还是引用数据类型,它都会完全拷贝过来深克隆:如果是基本数据类型,它会把记录的值拷贝过来;如果是字符串,那么它会复用串池中的;如果是除字符串外的引用数据类型,它就会创建新的小空间。而在我们之前讲的Object中的clone()方法属于浅克隆。

qq_39921135的博客 1500

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java浅克隆与深克隆

通常我们想复制一个对象,可以自己new出一个对象,并对相应的属性存入数据以实现克隆的目的。可是当属性较多时,这样的方式会十分麻烦。然而Java早已考虑好一切,我们知道,所有的对象都有一个共同的父类Object,而Object类中已经定义好了protected修饰的clone()方法,今天我们从这个方法开始,讲述Java的浅克隆与深克隆。 浅克隆与深克隆的区别 **浅克隆:**复制对象时仅仅复制对象...

学习即修行 6万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java中对象的克隆

浅克隆只复制对象本身,不复制对象中的引用类型成员变量所指向的对象(记录的是引用类型变量的地址)。新旧对象之间可能存在共享的引用关系。修改新对象中引用类型成员变量的状态可能会影响原始对象。

2303_79615760的博客 2119

java的浅克隆_java 浅克隆 深克隆

对象的克隆是java的一项高级技术,他可以根据给定的对象,获得与其完全相同的另一个对象。1.浅克隆主要是复制对象的值2.深克隆:当类存在聚合关系的时候,克隆就必须考虑聚合对象的克隆,可以复制引用类型的字段。一、常见的错误:Employee 类package text1;public classEmployee {privateString name;publicString getName() {...

weixin_36384964的博客 349

Java对象的浅克隆和深克隆

为什么需要克隆      在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。在Java语言中,用简单的赋值语句是不能满足这种需求的,要满足这种需求有很多途径。       克隆的实现方式

caomiao2006的专栏 9892

Java的对象克隆

在浅克隆中:源对象和克隆对象的成员变量指向相同的内存地址 直接重写Object的clone(),会抛出异常 正确用法:1.先实现实现Cloneable接口,再重写clone()方法 测试 作为属性的类(没有重写clone方法) 被克隆的类(重写了clone方法) 测试 两个对象关联的同一个Address对象,Address修改了,克隆对象的信息也发生了变化在深克隆中,无论源对象的成员是基本类型/引用类型,都会复制给克隆对象 也就是在深克隆中,对象和所有成员都会被克隆 而在浅克隆中,只会克隆对象和基本类型成

lanleihhh的博客 2596

Java 浅/深克隆、克隆数组

Java 浅/深克隆、克隆数组。及,示例代码演示。

一步一步往上爬 3034

Java学习之克隆

克隆概念以及深克隆与浅克隆

2301_81288466的博客 1583

Java -克隆实现方式 深克隆与浅克隆

我们平时复制一个值类型数据直接复制就好了,但是复制一个引用类型比如对象的时候就无从下手了,因为赋值只能赋引用,而如果手动操作把里面的值取出赋给新对象又太麻烦耗时了,有没有好办法?java提供了clone。克隆类型在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型,引用类

HJsir的博客 3252

Java的浅表克隆和深表克隆

Java克隆的浅显理解

ShenFly02200059的博客 1387

Java对象克隆

Java对象克隆,为什么要对象克隆,深克隆和浅克隆详解,深克隆实现方式,浅克隆实现方式。深克隆和浅克隆代码示例

2301_77713282的博客 1460

Java对象克隆——浅克隆和深克隆的区别

在Java中对象的克隆有深克隆和浅克隆之分。有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的。基本数据类型存储在栈中,引用数据类型存储在堆中。 什么是克隆 克隆就是依据已经有的数据,创造一份新的完全一样的数据拷贝。 实现克隆有多种方式,可以手工的new出一个新的对象,然后将原来的对象信息一个一个的set到新的对

XXX 2万+

java 的克隆_Java中的克隆

根据一个现有对象克隆出多个对象,这叫做原型模式。Java中的Cloneable接口定义了对象的克隆,它是一个声明式接口,没有定义任何抽象方法。Cloneable接口存在的唯一意义是:告知Java虚拟机,可以在该对象上调用Clone()方法。实际上,Clone()方法定义在Object类中,并且它是一个protected方法,如下所示:protected native Object clone() ...

weixin_39588209的博客 241
上一篇: ArrayList源码之为何线程不安全
下一篇: java序列化
ludkjava
博客等级 码龄11年 173粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值