`
izuoyan
  • 浏览: 9219488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中shallow clone 与deep Clone的区别

阅读更多

Java中实现对象clone的方式是implements Cloneable interface,然后在实现类中重写Object clone()方法.在Java中默认的是"shallow copy", 所以如果类的attribute中含有对象,并且希望实现"deep copy",就要将所涉及的类都 implements Cloneable and Serializable interfaces, 然后使用对象序列化的方式将对象写入disk, 然后再从disk中读出,并返回.

Example:

import java.util.Date;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.OptionalDataException;
import java.io.Serializable;

public class Monkey implements Cloneable, Serializable
{


private int height;
private int weight;

/**
* @directed
* @clientCardinality 1
* @supplierCardinality 1
*/
private GoldRingedStaff staff;
private Date birthDate;


public Monkey()
{
this.birthDate = new Date();
this.staff = new GoldRingedStaff();
}



public Object deepClone()
throws IOException, OptionalDataException, ClassNotFoundException
{
//write to stream
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(this);

//read from stream
ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
ObjectInputStream oi = new ObjectInputStream(bi);

return (oi.readObject());
}

public Object clone()
{
Monkey temp = null;
try
{
temp = (Monkey) super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println("Clone failed");
}
finally
{
return temp;
}
}

public int getHeight()
{
return height;
}

public void setHeight(int height)
{
this.height = height;
}

public int getWeight()
{
return weight;
}

public void setWeight(int weight)
{
this.weight = weight;
}

public Date getBirthDate()
{
return birthDate;
}

public void setBirthDate(Date birthDate)
{
this.birthDate = birthDate;
}

public GoldRingedStaff getStaff()
{
return staff;
}

}

分享到:
评论

相关推荐

    Java深浅clone

    在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让我们理解`Cloneable`接口。在Java中,如果一个类想要支持`clone()`方法,它必须实现`...

    Java中的克隆(Clone)机制

    在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...

    浅析Java中clone()方法浅克隆与深度克隆

    Java中的克隆(Clone)机制是面向对象编程中一种创建对象副本的方法,它允许程序员创建一个已有对象的新实例,新实例的数据与原对象相同。在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep ...

    Java Clone(类的复制)实例代码

    在Java中,对象的默认复制是浅复制(shallow copy),这意味着只复制对象本身,而不复制它引用的对象。要实现深复制(deep copy),需要自定义`clone()`方法。下面我们将详细探讨Java中的克隆以及提供的实例代码。 ...

    Clone详解.doc

    1. 浅克隆(Shallow Clone)与深克隆(Deep Clone) 浅克隆是Java默认的克隆方式,它仅仅复制对象的引用,而不是对象的内容。当对象包含非基本类型的成员变量时,这些成员变量仅复制引用,而不是创建新的实例。这...

    java object 之clone方法全面解析

    这篇文章将深入探讨`clone()`方法的工作原理、使用场景以及浅拷贝(shallow clone)与深拷贝(deep clone)的区别。 首先,让我们了解`clone()`方法的定义: ```java protected native Object clone() throws ...

    Java clone方法详解及简单实例

    Java中的`clone`方法是Java语言提供的一种复制对象的机制,它允许创建一个现有对象的副本,这个副本具有与原始对象相同的状态,但它们是独立的实体,对其中一个对象的修改不会影响另一个。`clone`方法是Java `Object...

    Java深复制与浅复制&Clone

    在Java中,浅复制可以通过`Object`类的`clone()`方法实现。但是,`clone()`方法默认的是浅复制,且需要被克隆的对象实现`Cloneable`接口。以下是一个简单的例子: ```java public class MyClass implements ...

    java 深克隆与浅克隆

    Java 深克隆与浅克隆 Java 中的克隆机制可以让我们方便地制造出一个对象的...Java 中的克隆机制可以方便地制造出对象的副本,但是需要注意浅克隆和深克隆的区别,并且需要正确地使用 Clone 方法,以避免不利的结果。

    java 深克隆 浅克隆

    在Java编程语言中,克隆是一种创建对象副本的方法,它允许我们复制一个对象并得到一个与原对象相同但独立的新对象。克隆分为两种主要类型:深克隆和浅克隆。理解这两种克隆的区别是Java面向对象编程中的重要概念。 ...

    Java深复制与浅复制.doc

    在Java编程中,复制对象是常见的操作,主要分为两种方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方式的区别在于处理对象内部引用其他对象的情况。 1. **浅复制(浅克隆)**: 浅复制是指创建一...

    JAVA浅克隆与深克隆

    克隆分为两种主要类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。这篇博客文章将探讨这两种克隆方式以及如何在Java中实现它们。 首先,我们来理解一下浅克隆。浅克隆是通过调用对象的`clone()`方法创建一个...

    java 对象克隆

    在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深克隆(Deep Clone)。浅克隆创建的新对象只复制了原对象的引用,这意味着如果原对象中包含可变的引用类型,如数组或复杂的数据结构,那么新对象和原对象会...

    java 深克隆浅克隆

    `clone()`方法是Object类中的受保护方法,它返回一个与当前对象相同类型的新实例。默认情况下,`clone()`方法执行的是浅克隆。如果你想要实现深克隆,需要自己编写逻辑来复制所有引用的对象。 5. 性能和适用场景: ...

    编程语言java对象复制.pdf

    在给出的内容部分中,通过具体的Java代码示例,讨论了在Java中实现对象复制的机制,特别是通过实现Cloneable接口和重写Object类的clone方法来完成对象的浅复制与深复制。 知识点一:Java对象复制的基本概念 在Java...

    java对象复制[参考].pdf

    Java对象复制主要分为浅复制(Shallow Copy)和深复制(Deep Copy)。本文将深入探讨Java对象复制,特别是通过`clone()`方法实现的复制。 首先,我们来理解什么是对象复制。对象复制是指创建一个新对象,这个新对象...

    java设计模式之原型模式

    在Java中,可以使用`Object`类中的`clone()`方法或序列化与反序列化来实现对象的复制。 ### Java中的克隆 Java中的克隆分为浅克隆和深克隆: - **浅克隆(Shallow Clone)**: 只复制对象本身,不复制对象引用的...

    Java对象的深克隆与浅克隆详解.zip(wcb2003)

    Java提供了两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。下面我们将深入探讨这两种克隆方法。 ### 浅克隆 浅克隆是指创建一个新的对象,其成员变量的值与原对象相同,但引用类型成员变量...

    java的深复制与浅复制

    Java提供了两种基本的对象复制方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方式各有特点,适用于不同的场景。 #### 二、浅复制(Shallow Copy) 浅复制是指在创建一个新对象时,该对象的属性值...

    如何进行Java对象的克隆.pdf

    Java 中的对象克隆可以分为两种类型:浅克隆(Shallow Cloning)和深克隆(Deep Cloning)。 浅克隆是指创建一个新的对象,并将原始对象的引用类型成员变量复制到新的对象中。在浅克隆中,新的对象和原始对象共享...

Global site tag (gtag.js) - Google Analytics