美文网首页
Java中的Clone

Java中的Clone

作者: 一只弹窗仔 | 来源:发表于2019-12-16 22:29 被阅读0次

参考:https://juejin.im/entry/5bafa3d66fb9a05cff322691
总结:
1、如果想要支持clone,就需要实现Cloneable 接口
2、如果没有实现Cloneable接口的调用clone方法,会抛出CloneNotSupportedException异常。
3、重写clone方法,并修改成public访问级别
深拷贝:
1、使用默认的clone方法
2、对于原始数据域进行值拷贝
3、对于引用类型仅拷贝引用
4、执行快,效率高
5、不能做到数据的100%分离。
6、如果一个对象只包含原始数据域或者不可变对象域,推荐使用浅拷贝。
浅拷贝:
1、需要重写clone方法,不仅仅只调用父类的方法,还需调用属性的clone方法
2、做到了原对象与克隆对象之间100%数据分离
3、如果是对象存在引用类型的属性,建议使用深拷贝
4、深拷贝比浅拷贝要更加耗时,效率更低
深拷贝实现方式:

 //深度拷贝
    public Object deepClone() throws Exception{
        // 序列化
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        oos.writeObject(this);
        // 反序列化
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bis);
        return ois.readObject();
    }

序列化是将对象写到流中便于传输,而反序列化则是把对象从流中读取出来。这里写到流中的对象则是原始对象的一个拷贝,因为原始对象还存在 JVM 中,所以我们可以利用对象的序列化产生克隆对象,然后通过反序列化获取这个对象。
注意每个需要序列化的类都要实现 Serializable 接口,如果有某个属性不需要序列化,可以将其声明为 transient,即将其排除在克隆属性之外。
因为序列化产生的是两个完全独立的对象,所有无论嵌套多少个引用类型,序列化都是能实现深拷贝的。

相关文章

  • Java Clone 学习

    Java Clone 学习 原文地址:详解Java中的clone方法 通常在Java中我们通过new关键字创建对象...

  • Java中的Clone

    参考:https://juejin.im/entry/5bafa3d66fb9a05cff322691总结:1、如...

  • Java中的clone

    Java中对象的创建 使用new操作符创建一个对象 使用clone方法复制一个对象 那么这两种方式有什么相同和不同...

  • 原型模式——对象clone

    Java中对象的clone可以通过Object中的clone()来实现,步骤如下:1、实现cloneable接口(...

  • 详解Java中的clone方法 -- 深拷贝和浅拷贝

    Java中对象的创建 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。...

  • Clone() method in Java

    原文:geeks4geeks Java 中的 clone() 方法 对象 clone 是指创建对象的精确拷贝,它创...

  • Object类常用方法

    #clone Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,...

  • Java Clone

    Java Clone 平时项目中用的也不多,今天来实践下Java的Clone。Clone主要分为“浅拷贝”与“深拷...

  • java收藏夹

    java中的经典问题solution Java 的静态工厂方法 单例的四种实现方法 Java中的clone方法 J...

  • Java中对Clone的理解

    在面试中大家可能会被问到关于Clone的相关知识,经过分析和研究总算把Clone理解了。不过只是个人的观点,大家不...

网友评论

      本文标题:Java中的Clone

      本文链接:https://www.haomeiwen.com/subject/uwrjnctx.html