`

Dev-No.02 Cloneable与Clone(深拷贝、浅拷贝)

阅读更多

 

共享heap中的空间

 实现clone()方法条件:

 

  • 需拷贝的类实现Cloneable接口(该接口内没有方法)、
  • 实现 public Object clone() 方法

 

    clone()为浅拷贝,若想改为深拷贝,需类中可变域生成新的实例

//浅拷贝:

		public class ShallowCopy implements Cloneable{
     			private Date begin;
     			public Date getBegin(){return this.begin;}
     			public void setBegin(Date d){this.begin=d;}
     			public Object clone(){
 				Object obj=null;
        			try {
  					obj=super.clone();
 			 	}catch (CloneNotSupportedException ex) {
        				ex.printStackTrace(); 
     				}
 				return obj;
     			}
        }

 //深拷贝:

public class DeepCopy implements Cloneable{
 		private Date begin;
     		public Date getBegin(){return this.begin;}
     		public void setBegin(Date d){this.begin=d;}
     		public Object clone(){
 		DeepCopy obj=null;
 		try{
  			obj=(DeepCopy)super.clone();
  		}catch (CloneNotSupportedException ex) {
        		ex.printStackTrace(); 
    		}
 		obj.setBegin((Date)this.getBegin().clone());
 		return obj;
    		}
    }
分享到:
评论

相关推荐

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

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

    itstack-demo-design.zip

    Java中通过实现Cloneable接口并覆写clone()方法来实现。 5. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Java中的Observer和...

    15-ProtoType.rar

    但是,需要注意的是,`clone()`方法默认只执行浅拷贝,即只复制对象的引用,而不复制对象内的引用对象。如果对象内部包含其他对象,需要实现深拷贝来确保所有层次的对象都被复制。 在JavaScript中,由于其原型链...

    java提高篇(二三)-----HashMap.pdf

    1. **HashMap的定义与特性** - HashMap是一个基于哈希表的实现,提供了键映射到值的服务。 - 它继承自AbstractMap,实现了Cloneable和Serializable接口,意味着它可以被复制和序列化。 - HashMap的核心特性是其...

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 示例代码

    - 实现`Cloneable`接口并重写`clone()`方法需要注意,`clone()`默认执行的是浅拷贝,需要在子类中显式调用`super.clone()`并处理引用类型的字段。 - 序列化和反序列化可能涉及性能开销,不适合大量或频繁的复制...

    commons-lang3-3.2.1-bin.zip

    - `CloneUtils`:提供了对对象克隆的支持,即使源对象没有实现`Cloneable`接口。 10. **代码生成**: - `CodePointUtils`:处理Unicode码点的工具类。 这些工具类的设计都遵循了Java设计模式,使得代码更加简洁...

    designPattern-java.pdf

    利用 `Cloneable` 接口和 `clone()` 方法实现对象的复制。 **使用原型:** ```java public class Prototype implements Cloneable { @Override public Object clone() throws CloneNotSupportedException { ...

    java对象的深拷贝和浅拷贝[归类].pdf

    4. **浅拷贝与深拷贝示例**: 在给出的例子中,我们有两个测试类`Test2`和`Test3`,分别演示了浅拷贝和深拷贝的效果。 - 在`Test2`中,通过简单赋值创建了一个新的`Test`对象`t2`,这是浅拷贝。当修改`t2`的属性时...

    Java中clone方法共6页.pdf.zip

    然而,需要注意的是,简单地调用`clone()`并不总是能创建出完全独立的对象,尤其是当对象内部包含引用其他对象时,这种情况下只进行了浅拷贝,而不是深拷贝。 1. **浅拷贝与深拷贝**: - 浅拷贝:当一个对象被复制...

    Clone详解.doc

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

    java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】

    java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】 * 原型模式(Prototype) * 实现方式: * 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 ...

    详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)

    `TestString`类中的`main`方法展示了浅拷贝、默认`clone()`方法实现的深拷贝以及序列化实现的深拷贝的用法。`qianCopyTest()`展示了浅拷贝的效果,其中对于包含可变对象的`Person`实例,修改副本会影响原始对象。`...

    《剑指offer》Java浅拷贝和深拷贝.pdf

    在Java中,可以通过实现`Cloneable`接口并重写`clone()`方法来实现浅拷贝。例如: ```java public class Food implements Cloneable { ... @Override protected Object clone() throws ...

    浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)实战工程

    在编程领域,尤其是在Java语言中,对象的复制是常见的操作,这涉及到两个主要概念:浅拷贝(浅复制、浅克隆)和深拷贝(深复制、深克隆)。这两个概念是理解对象生命周期和内存管理的关键部分。下面将详细阐述它们的...

    Java 课件

    Java提供了一个`clone()`方法,但要注意它需要正确实现`Cloneable`接口。序列化(Serialization)则是将对象转换为字节流,以便于存储或网络传输,然后再反序列化恢复原对象。 6. **JAVA-L15-CollectionFramework....

    Java 细数浅拷贝和深拷贝

    ### 深入理解浅拷贝与深拷贝 #### 关于引用 在Java中,对象的处理方式涉及到了“引用”的概念。简单地说,当我们谈论一个对象时,实际上是通过一个引用指向该对象所在的内存位置。Java中有两种数据类型:基本数据...

    java_clone用法

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

Global site tag (gtag.js) - Google Analytics