今天编写一个用到Cloneable接口的程序时才注意到原来clone()方法提供的是浅层拷贝,而不是我先前认为的深层拷贝。
class A implements Cloneable{
int a=1;
ArrayList b=new ArrayList();
public A getClone(){
return (A) this.clone();
}
}
对于这样的一个类,如果调用它的getClone()方法进行复制的话,成员变量a会被复制,但是成员变量b不会像预想的那样会复制一个
ArrayList(),复制的对象与原先的对象中的b都会指向相同的一个ArrayList()。因此如果需要做深层拷贝需要添加额外的代码。
class A implements Cloneable{
int a=1;
ArrayList b=new ArrayList();
public A getClone(){
A temp=(A) this.clone();
temp.b=new ArrayList();
for(int i=0;i<b.size();i++){
temp.b.add(b.get(i));
}
return temp;
}
}
原始对象中的字符串和数组不受到克隆对象设置值的影响(会创建一个独立的),而类对象变量则会受到了克隆对象的影响。如list、map........ ;static修饰的也将是以引用的形式克隆
http://hi.baidu.com/lzqxiaoqiang09/blog/item/61ebce62b3fde36d0d33faaf.html
分享到:
相关推荐
本实验主要讲解了Java中的抽象类和接口的概念和使用方法,并且深入探讨了 Cloneable 接口和 clone 方法在对象内容复制中的应用。 一、抽象类的概念和使用方法 在 Java 中,抽象类是一个不能被实例化的类,它提供了...
在Java编程语言中,API(Application Programming Interface)是一组预先定义的类、接口、方法和其他资源,它们为开发者提供了构建应用程序的标准工具。Java API接口是其中的关键部分,它定义了类之间的交互方式,...
Cloneable 接口是 Java 中的一个特殊的接口,它提供了一种复制对象的方法。Cloneable 接口只有一个方法:clone,该方法可以创建一个对象的拷贝。 在实验中,我们实现了 Cloneable 接口,并提供了一个 clone 方法,...
因此,在clone()方法中,需要使用try-catch语句捕获该异常,并适当处理,如打印堆栈跟踪信息。 知识点六:代码示例 文档给出的代码示例包含以下几个类: - CloneClass:一个简单的类,演示了如何通过重写clone()...
本章将详细介绍抽象类和接口的概念、使用方法和实现细节。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能直接创建对象。抽象类的主要目的是提供一个基类,以便其他类可以继承它。抽象类可以包含抽象方法和非...
- clone() 方法是 Java 中的一个方法,它可以创建对象的拷贝,但是需要实现 Cloneable 接口,clone() 方法可以创建浅拷贝或深拷贝,浅拷贝只拷贝对象的引用,而深拷贝则拷贝对象的所有成员变量。 - 序列化机制是 ...
// 假设User类也实现了Cloneable接口 return clonedAccount; } ``` #### 七、何时选择深拷贝 并非所有的引用类型都需要进行深拷贝。如果引用的对象是不可变的(如`String`),则无需深拷贝,因为它们的状态无法...
### Java中的Vector定义与用法详解 #### 一、Vector简介 `Vector`是Java集合框架中的一个类,它提供了一种线程安全的动态数组实现。与`ArrayList`不同,`Vector`在多线程环境中能确保数据的一致性和安全性,这主要...
6. 学习掌握抽象类的概念和使用方法 7. 学习掌握多态性和动态绑定的概念,学习使用多态进行程序设计 8. 学习掌握接口的概念和定义接口的方法 9. 学习使用 Cloneable 接口和 clone 方法进行对象内容的复制 10. 理解浅...
本资料"Java中clone方法共6页.pdf.zip"可能包含了关于如何理解和使用`clone()`方法的详细解释,以及它在实际开发中的应用示例。 `clone()`方法的主要用途是创建一个现有对象的副本,这个副本与原始对象具有相同的...
Java中可以利用`java.lang.Cloneable`接口和`clone()`方法实现。 6. **适配器模式(Adapter)**:使两个不兼容的接口能够协同工作。在Java中,可以使用类适配器或对象适配器模式,通过继承或组合实现。 7. **桥接...
这种模式的核心在于Java中的`Cloneable`接口和`clone()`方法。 首先,我们要了解`Cloneable`接口。在Java中,如果一个类想要实现克隆功能,必须实现`Cloneable`接口。这个接口没有定义任何方法,仅仅是一个标记接口...
Java中的`Cloneable`接口和`Object`类的`clone()`方法支持原型模式的实现。 6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。在Java中,可以使用类适配器或接口适配器,使不兼容的接口能够协同工作...
Java中有一个内置的Cloneable接口和Object类的clone()方法,它们可以被用来实现对象的克隆。但是,直接使用clone()方法需要处理一些复杂的问题,比如深拷贝和浅拷贝的区别。 压缩包文件代码是一个使用Java实现原型...
6. **Cloneable接口**: - 实现`Cloneable`接口的对象可以通过`clone()`方法进行浅复制。 7. **包装类与基本类型之间的自动转换**: - Java提供了对应的包装类(如`Integer`、`Double`等)用于封装基本类型,并且...
Java中,可以利用`java.lang.Cloneable`接口和`clone()`方法。 2. **结构型设计模式** - **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在Java中,可以使用动态代理(`java.lang.reflect.Proxy`)...
深拷贝可以通过序列化和反序列化实现,或者手动实现Cloneable接口并重写`clone()`方法。 示例代码(使用序列化): ```java import java.io.*; class MyClass implements Serializable { int a; String b; ...
Java中提供了Cloneable接口来支持浅复制和深复制。 6. **适配器模式(Adapter)**:将一个类的接口转换成客户期望的另一个接口。在Java中,可以使用继承或组合来实现适配。 7. **装饰器模式(Decorator)**:动态...