zoukankan      html  css  js  c++  java
  • 浅克隆和深克隆

    这是原型设计模式

    当我们拥有一个对象 obj_01 的时候,我们想通过拷贝这个对象来得到另一个对象 obj_02,类似于复制粘贴功能。这个过程叫做【克隆】,这个模型就叫做原型模式

    细分有2种:浅克隆、深克隆

    浅克隆。java 中每个对象都是 Object.java 的子类,Object 有一个方法 clone(),所以每个类都可以通过 super.clone()方法来实现浅克隆。浅克隆会给新对象一个新的内存地址,但是新对象引用类型的成员变量的地址仍然不会改变。待克隆的类必须实现接口 Cloneable,否则会抛出异常

    深克隆。深克隆是相较浅克隆而言的,它不仅会改变克隆后新对象的内存地址,它还会给新对象的每一个成员变量重新分配内存地址(即使该成员变量为引用类型)。也就是说新对象和老对象在内存的占用上已经完全不同了,没有任何共用的地方。

    浅克隆的实现

    @Override
    	protected Object clone() {
    		Object clone=null;
    		try {
    			clone= super.clone();
    		} catch (CloneNotSupportedException e) {
    			e.printStackTrace();
    		}
    		return clone;
    	}
    

      

    深克隆的实现

    @Override
    	protected Object clone() {
    		Object clone = null;
    		try{
    			ByteArrayOutputStream baos = new ByteArrayOutputStream();
    	        ObjectOutputStream oos = new ObjectOutputStream(baos);
    	        oos.writeObject(this);
    	        
    	        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
                ObjectInputStream ois = new ObjectInputStream(bais);
                clone=ois.readObject();
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		return clone;
    	}
    

      

  • 相关阅读:
    挺有意思的HBase日志+Splunk
    eclipse连接远程hadoop集群开发时权限不足问题解决方案
    auxiliary variable(辅助变量)的引入
    auxiliary variable(辅助变量)的引入
    十万个为什么 —— 自然的好奇
    十万个为什么 —— 自然的好奇
    高级鸡汤
    高级鸡汤
    protobuf反射详解
    思想实验(逻辑思维)解题
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/10773766.html
Copyright © 2011-2022 走看看