`

Clone --浅、深

 
阅读更多
所谓浅克隆即是只将相应成员变量进行拷贝,如果含有复杂类型的成员则不进行进一步的复制,而只是将其引用进行复制。
深克隆就是复制到底~~

要实现深克隆有两种方法:
一种是将相应的类都实现克隆接口,在包含复杂类型成员的克隆方法中调用相应的成员的克隆方法。如
public class A implements Cloneable,Serializable
{
private static final long serialVersionUID = -2051342021933626021L;
  B b;

 public A(B b)
 {
   this.b=b;
 }

 public Object clone()
 {
    A obj=null;
    try
    {
       obj=(A)super.clone();
       obj.b=(B)b.clone();
    }
    catch (CloneNotSupportedException e) 
     {
	e.printStackTrace();
	}
   return obj;
 }
}

public class B implements Cloneable,Serializable
{
 private static final long serialVersionUID = -5189809844536624029L;
  public Object clone()
 {
    B obj=null;
    try
    {
       obj=(B)super.clone();
    }
     catch (CloneNotSupportedException e) 
     {
	e.printStackTrace();
	}
   return obj;
 }
}


第二种方法是通过将对象序列化与反序列化来实现复制
A a1=new A1(new B());
ByteArrayOutputStream in=new ByteArrayOutputStream();
ObjectOutputStream inStream=new ObjectOutputStream(in);
inStream.writeObject(a1);
		
		
ByteArrayInputStream out=new ByteArrayInputStream(in.toByteArray());
ObjectInputStream outStream=new ObjectInputStream(out);
A a2=(A)outStream.readObject();

分享到:
评论

相关推荐

    flow-clone-源码.rar

    在JavaScript中,由于其特有的原型链和引用类型,深拷贝和浅拷贝的概念尤为重要,"flow-clone"可能是实现深拷贝的一种解决方案。 解压"flow-clone-源码.zip"后,我们可以看到项目的组织结构。源码文件通常包含以下...

    Java Clone深拷贝与浅拷贝的两种实现方法

    Java Clone 深拷贝与浅拷贝的两种实现方法 Java Clone 是 Java 语言中的一种复制对象的机制,它可以将一个对象的所有属性和状态复制到另一个对象中,实现对象的深拷贝和浅拷贝。下面我们将讨论 Java 中的深拷贝和浅...

    Java深浅clone

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

    前端开源库-better-clone

    在JavaScript中,对象的复制通常有浅拷贝和深拷贝两种方式。浅拷贝仅复制对象的顶层属性,而深拷贝会递归复制整个对象及其嵌套的属性。`better-clone` 库致力于提供深拷贝功能,确保即使面对嵌套对象和数组,也能...

    java_clone用法

    ### Java中的`clone`方法详解:浅拷贝与深拷贝 #### 一、引言 在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文...

    Java深复制与浅复制&Clone

    有两种主要的复制方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方法在处理对象时有不同的行为和应用场景,特别是在涉及到复杂数据结构时。本文将深入探讨这两种复制方式,并通过实例来解释它们的...

    31.3、深复制和浅复制clone1

    例如,如果我们有一个`Student`对象`stu1`,并且`stu1`有嵌套的`Address`对象,那么在浅复制`stu2 = stu1.clone()`后,修改`stu2`的`Address`将会影响`stu1`的`Address`,而在深复制中,`stu2`的`Address`更改不会...

    youtube-clone-react

    使用React.js的YouTube克隆特征搜索栏浅色/深色主题无限滚动图书馆React路由器DOM React Redux 雷德克斯·桑克(Redux Thunk) Axios可用脚本在项目目录中,可以运行: npm开始npm运行构建npm运行部署

    前端开源库-lutils-clone

    `lutils-clone`是一个专门用于JavaScript对象克隆的开源库,它提供了一个高效、可靠且递归的解决方案,确保深拷贝过程中原始对象与克隆对象之间不会相互影响。 JavaScript的内置`Object.assign()`方法可以实现浅...

    twitter-clone-frontend:Twitter克隆前端

    Twitter克隆前端 使用React和Apollo Client构建的Twitter克隆前端如果您正在寻找后端仓库,。核心套餐阿波罗客户端-状态管理,执行graphql查询和变异,缓存结果样式化的组件-样式React路由器-路由... PRODUCTION_ENDP

    java Clone

    `clone`方法分为两种类型:浅克隆(Shadow Clone)和深克隆(Deep Clone)。浅克隆是指只复制对象本身,而不复制其引用的对象。如果对象中包含其他对象的引用,那么这些引用的对象不会被复制,而是共享同一份引用。...

    Java中的克隆(Clone)机制

    在`Employee`类中,可以通过重写`clone()`方法并显式调用`hireDay.clone()`来实现深克隆,确保每个克隆的`Employee`对象拥有自己的`Date`对象副本。 3. **`clone()`方法的保护机制** `Object`类中的`clone()`方法...

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

    在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep Clone)。 1. 浅克隆(Shallow Clone) 浅克隆是Java克隆机制的默认行为。当一个对象被克隆时,如果它的成员变量是基本类型(如int、double...

    Clone详解.doc

    在`Employee`类中,我们重写了`clone()`方法,首先调用了`super.clone()`获取浅克隆的对象,然后对`hireDay`字段进行了深拷贝,即调用了`Date`对象的`clone()`方法。这样,新克隆的`Employee`对象就有了自己独立的`...

    java clone

    默认的`clone`方法是浅拷贝,如果需要深拷贝,需要在子类中自行处理。 下面是一些关于`clone`的实践心得: 1. 注意权限:默认情况下,`clone`方法是`protected`的,这意味着在同一个包内的类才能直接调用。如果需要...

    twitter-clone-backend:Twitter克隆后端(Prisma + GraphQL)

    Twitter克隆后端 使用Prisma和GraphQL构建的Twitter克隆后端。 如果您正在寻找前端存储库, 签出已 核心套餐 pyramida-允许我们定义应用程序模型并根据定义的模型生成CRUD操作 graphql-yoga jsonwebtoken-身份验证 ...

    android 浅复制和深复制-Java Generic Deep Copy 篇

    本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...

    java 深克隆与浅克隆

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

    java clone的小例子

    当我们修改克隆对象`student2`的年龄时,原始对象`student1`的属性保持不变,这显示了`clone()`创建的是对象的浅拷贝。 需要注意的是,对于包含引用类型的字段,`clone()`只会复制引用,而不是引用的对象。这意味着...

    clone()示例源码

    `clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存管理中扮演着关键角色。 首先,让我们理解`clone()`的基本用法。`clone()`方法创建并返回一个当前对象的副本,新创建的对象与原对象具有...

Global site tag (gtag.js) - Google Analytics