public class ObjectClone implements Cloneable { private int i; private Handler handler = new Handler(101, "chenzq"); public ObjectClone(int i) { this.i = i; } public void increase() { this.i++; } public void changeHandler(String str) { this.handler.setStr(str); } public int getI() { return this.i; } public Handler getHandler() { return this.handler; } @Override public Object clone() { ObjectClone o = null; try { o = (ObjectClone) super.clone(); } catch (CloneNotSupportedException ex) { ex.printStackTrace(); } o.handler = (Handler) o.handler.clone(); return o; } public static void main(String[] args) { ObjectClone o = new ObjectClone(100); ObjectClone oc = (ObjectClone) o.clone(); o.increase(); System.out.println("o.i = " + o.getI() + ", oc.i = " + oc.getI()); o.changeHandler("jaesonchen"); System.out.println("o.handler = " + o.handler); System.out.println("oc.handler = " + oc.handler); } } class Handler implements Cloneable { private int j = 100; private String str = "default"; public Handler() { } public Handler(int j, String str) { this.j = j; this.str = str; } public void setStr(String str) { this.str = str; } @Override public Object clone() { Object o = null; try { o = super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return o; } @Override public String toString() { return "Handler.j = " + j + ", Handler.str = " + str; } }
输出为:
o.i = 101, oc.i = 100
o.handler = Handler.j = 101, Handler.str = jaesonchen
oc.handler = Handler.j = 101, Handler.str = chenzq
* Object.clone()会检查原先的对象有多大,再为新对象腾出足够多的内存,将所有二进制位从原来的对象
复制到新对象。
* 对于基本数据类型,直接复制,对于引用类型,如果引用类型或其基类实现了Cloneable接口,则调用
该对象的clone复制引用类型对象, 如果没有实现Cloneable接口,则直接复制对象句柄,实际上复制后
的对象和原对象指向同一个引用类型。
* 类或者基类必须实现标志空接口Cloneable,否则在调用clone方法时会抛出
CloneNotSupportedException异常。
* 克隆时要注意的两个关键问题是:几乎肯定要调用super.clone(),以及注意将克隆设为public。
* 调用Object.clone()时,根类中的clone()方法负责建立正确的存储容量,并通过“按位复制”
二进制位从原始对象中复制到新对象的存储空间。也就是说,它并不只是预留存储空间以及复制
一个对象 —— 实际需要调查出欲复制之对象的准确大小,然后复制那个对象。
* 不管我们要做什么,克隆过程的第一个部分通常都应该是调用super.clone()。通过进行一次准确的复制,
这样做可为后续的克隆进程建立起一个良好的基础。随后,可采取另一些必要的操作,以完成最终的
克隆。
相关推荐
在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...
Java中的对象复制与克隆是程序开发中常见的需求,主要用于创建一个对象的副本,而不会影响原始对象的状态。这里主要讨论两种类型的对象拷贝:浅拷贝和深拷贝。 浅拷贝,也称为表面拷贝,是创建一个新的对象,然后将...
标题中的“java对象复制克隆”主要涉及的是深拷贝,这是一种创建一个新对象的方式,新对象不仅复制了原对象的所有属性,还复制了嵌套的对象引用,使得修改复制后的对象不会影响到原始对象。 **浅拷贝**:在浅拷贝中...
总结,Java中的对象克隆是一项重要的功能,用于复制和独立化对象。通过实现`Cloneable`接口和覆盖`clone()`方法,我们可以创建浅克隆对象。对于更复杂的场景,可以自定义克隆逻辑或利用序列化来实现深克隆。理解并...
Java中的对象克隆可以通过实现`Cloneable`接口并覆盖`clone()`方法来完成。对象的克隆分为浅拷贝和深拷贝两种形式。 **1. 浅拷贝** 浅拷贝是指创建一个新的对象,然后将原对象的所有非引用类型的成员变量复制到新...
在Java编程语言中,`clone`是一个非常重要的概念,它涉及到对象复制和对象克隆。本文将深入探讨Java中的`clone`方法,包括其工作原理、使用场景、注意事项以及一些个人实践心得。 首先,让我们理解什么是`clone`。...
1. 浅克隆:默认的`clone()`方法执行的是浅克隆,它创建的新对象只复制原始对象的基本数据类型字段,对于引用类型的字段,新对象和原始对象共享同一个引用。这意味着对引用对象的修改会影响到原始对象。 2. 深克隆...
总结来说,对象克隆是Java中用于复制对象的一种机制,分为浅克隆和深克隆,分别对应于是否深度复制对象内部的引用。实现克隆的关键是实现`Cloneable`接口并重写`clone()`方法。理解这两种克隆方式的区别和应用场景,...
在Java中,`clone`方法提供了一种快速复制对象的方式。它属于`Object`类的一部分,但需要显式地在子类中声明并实现`Cloneable`接口才能正常使用。本文将详细介绍`clone`的基本概念、工作原理以及如何实现浅拷贝和深...
克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,...
在Java编程中,对象复制是一项常见的任务,特别是在处理模型(Model)和视图对象(VO)时。模型对象通常用于封装业务数据,而视图对象则用于展示这些数据。值复制,即对象属性值的复制,是保持数据一致性和简化代码...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...
因此,所有Java对象默认都具备`clone()`能力。但是,为了使用它,我们需要覆盖`clone()`方法,并且确保类实现了`Cloneable`接口,以避免抛出异常。 测试代码通常会包括以下步骤: 1. 实现`Cloneable`接口。 2. ...
Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....
在MyBatis中,我们通常会定义Mapper接口和XML配置文件,映射SQL语句与Java对象之间的关系。如果需要在数据库操作后复制对象,可以在Mapper接口的方法中,或者在Service层中实现对象复制。 总的来说,Java中的对象...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在处理对象复制和数据持久化时。本示例将深入探讨`clone()`方法的工作原理、使用场景以及如何在实际编程中应用。首先,我们来理解一下`clone()`方法的...
"Java 对象克隆详解" Java 对象克隆是 Java 编程中一个重要的概念。由于 Java 中的对象使用引用类型,所以没有直接的方法可以将对象的内容复制到一个新的对象。Java 提供了一个特殊的 clone() 方法,为所有的引用...
在标题“编程语言java对象复制.pdf”和描述“编程语言java对象复制.pdf”中,明确指出了文档的主题是关于Java编程语言中对象复制的技术知识。在给出的内容部分中,通过具体的Java代码示例,讨论了在Java中实现对象...
Java对象复制是一个重要的...总的来说,Java对象复制是一个复杂的过程,需要考虑`clone()`方法的使用、`Cloneable`接口的实现以及浅拷贝和深拷贝的区别。在实际开发中,根据具体需求选择合适的复制方式是非常重要的。