• 关于克隆


            java对象的克隆分为深克隆(把要克隆的对象及所有引用对象都克隆了)和浅克隆。

            实现深克隆的方法:1、所有引用对象都实现cloneable接口,重写Object 类的clone方法。

                                     2、利用串行化来做深复制,即把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序师圈子里又非常形象地称为“冷冻”或者“腌咸菜(picking)”过程;而把对象从流中读出来的并行化(Deserialization)过程则叫做 “解冻”或者“回鲜(depicking)”过程。

    应当指出的是,写在流里的是对象的一个拷贝,而原对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝,Java咸菜还可以回鲜。
    在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读出来(把咸菜回鲜),便可以重建对象。
    如下为深复制源代码。
    public Object deepClone()    
    {    
    //将对象写到流里    
    ByteArrayOutoutStream bo=new ByteArrayOutputStream();    
    ObjectOutputStream oo=new ObjectOutputStream(bo);    
    oo.writeObject(this);    
    //从流里读出来    
    ByteArrayInputStream bi=new ByteArrayInputStream(bo.toByteArray());    
    ObjectInputStream oi=new ObjectInputStream(bi);    
    return(oi.readObject());    
    }   

    这样做的前提是对象以及对象内部所有引用到的对象都是可串行化的,否则,就需要仔细考察那些不可串行化的对象可否设成transient,从而将之排除在复制过程之外。

  • 相关阅读:
    OpenCV (一)图片读取、修改、保存
    用matplotlib进行数据分析(可视化)
    笔记
    vrpano
    四、threejs——模型交互
    三、threejs不显示英文就是乱码情况,中文解决方案
    二、GLTF模型支持
    一、threejs————灯光阴影
    node的httpserver简单创建
    em和rem区别
  • 原文地址:https://www.cnblogs.com/Rozdy/p/4090271.html
Copyright © 2020-2023  润新知