`
flyPig
  • 浏览: 139595 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java clone备忘

    博客分类:
  • Java
阅读更多
1.Object clone 就是复制一个对象的复本,在Factory模式中比较常用。对象要实现Clone的功能,就必须implements Clonable interface, 事实上,这是一个没有任何method的interface。对象的clone方法是Object类的方法,如果对象没有implements Clonable,就会throw CloneNotSupportedException.
 protected native Object clone() throws CloneNotSupportedException;


2.一个Object可能有基本数据类型,如:int,long,float,double等,也会含有非基本数据类型如数组,collection,自定义对象等。如果被克隆得到的对象基本类型的值修改了,原对象的值不会改变.这种就是shadow clone.


3.如果你要改变一个非基本类型的值时,原对象的值却改变了,.比如一个数组,内存中只copy他的地址,而这个地址指向的值并没有copy,当clone时,两个地址指向了一个值,这样一旦这个值改变了,原来的值当然也变了,因为他们共用一个值.,这就必须得用deep clone。重载clone方法,对于非原始类型的对象,手动去作clone,这样比较复杂,公用性不高,对于每个类都要去写一套。

4.序列化/反序列化方式实现deepclone
如果source对象实现了Serializable接口,就可用这种方式来做deepclone,一段示例代码
public Object deepClone(Object src) {
		Object o = null;
		try {
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				ObjectOutputStream oos = new ObjectOutputStream(baos);
				oos.writeObject(src);
				oos.close();

				ByteArrayInputStream bais = new ByteArrayInputStream(baos
						.toByteArray());
				ObjectInputStream ois = new ObjectInputStream(bais);
				o = ois.readObject();
				ois.close();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return o;
	}

分享到:
评论

相关推荐

    javascript-rocketseat:使用Java编写备忘录

    在本项目中,我们主要探讨的是如何使用Java编程语言来创建一个备忘录应用程序。JavaScript,通常用于前端开发,但这里我们将看到它如何与后端技术结合,构建一个功能丰富的应用。RocketSeat是一个知名的在线教育平台...

    Java的23种设计模式百度云下载链接.rar

    Java中提供了`clone()`方法支持浅复制。 6. **组合模式**:允许你将对象组合成树形结构来表现“整体/部分”层次结构。在Java UI组件树中广泛应用。 7. **装饰器模式**:动态地给一个对象添加一些额外的职责。Java...

    java的设计模式 《设计模式-java语言中的应用.pdf》

    Java中的`Cloneable`接口和`Object`类的`clone()`方法支持原型模式的实现。 6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。在Java中,可以使用类适配器或接口适配器,使不兼容的接口能够协同工作...

    23种设计模式的java实现源代码.rar

    Java中可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式(Adapter)**:使两个不兼容的接口能够协同工作。在Java中,可以使用类适配器或对象适配器模式,通过继承或组合实现。 7. **桥接...

    23三种设计模式java实现

    Java中,可以利用`java.lang.Cloneable`接口和`clone()`方法。 2. **结构型设计模式** - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,可以使用动态代理(`java.lang.reflect.Proxy`)...

    java设计模式源码

    Java中,可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。在Java中,可以通过实现目标接口或继承目标类来实现。 7. **装饰器...

    Java 的 23 种设计模式

    Java的`Object.clone()`方法即为原型模式的体现。 6. **组合模式 (Composite)**:将对象组合成树形结构以表示“部分-整体”的层次结构。Java的`java.awt.Container`和`java.awt.Component`类就使用了组合模式。 7....

    JAVA设计模式java 各种设计模式

    Java提供了`clone()`方法支持浅复制,也可以通过序列化实现深复制。 6. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。适配器让原本不兼容的类可以协同工作。在Java中,可以通过继承或...

    JAVA设计模式.pdf

    - **JAVA实现**:实现`Cloneable`接口并通过`clone()`方法复制对象。 **(3)建造者模式(Builder)** - **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**...

    java设计模式

    24.4.1 clone方式的备忘录 24.4.2 多状态的备忘录模式 24.4.3 多备份的备忘录 24.4.4 封装得更好一点 24.5 最佳实践 第25章 访问者模式 25.1 员工的隐私何在? 25.2 访问者模式的定义 25.3 访问者模式的应用 25.3.1 ...

    23种设计模式的java实现

    Java中提供了`java.lang.Cloneable`接口和`clone()`方法来支持原型模式。 6. 组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。Java中的`List`, `Set`, `Map`等集合类都是组合模式的应用。 7. ...

    Java设计模式(全)

    Java中的`Object.clone()`方法可以实现浅拷贝。 2. **结构型设计模式**: - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,可以通过动态代理实现,如`java.lang.reflect.Proxy`和`java....

    设计模式代码(Java实现)

    Java中可以实现Cloneable接口并覆写clone()方法来实现原型模式。 6. **适配器模式** (Adapter):将一个类的接口转换成客户希望的另一个接口。在Java中,可以使用类适配器或对象适配器模式,通过继承或组合来实现...

    设计模式Java版

    Java中的`clone()`方法或序列化机制可以实现原型模式。 5. **适配器模式**:允许两个不兼容的接口协同工作。在Java中,可以使用类适配器或对象适配器来实现这种模式。 6. **装饰器模式**:动态地给一个对象添加...

    设计模式的Java实现

    Java中的`clone()`方法可用于实现原型模式。 6. **组合模式**:将对象组合成树形结构以表示“部分-整体”的层次结构。Java中,通过接口统一处理叶子节点和树枝节点。 7. **装饰器模式**:动态地给一个对象添加一些...

    java23种设计模式

    5. **原型模式**:通过复制已有对象来创建新对象,Java中可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式**:将一个类的接口转换成客户期望的另一个接口。在Java中,可以使用类适配器或...

    JAVA设计模式.影印版

    Java中的`clone()`方法或序列化机制可以实现原型模式。 6. **适配器模式**:将不兼容的接口转换为用户期望的接口,使得原本因接口不兼容而不能一起工作的类可以协同工作。适配器模式在Java中广泛应用于组件之间的...

Global site tag (gtag.js) - Google Analytics