有时想得到对象的一个复制品,该复制品的实体是原对象实体的克隆。复制品实体的变化不会引起原对象实体发生变化,这样的复制品称为原对象实体的克隆对象或简称克隆。
1、"shallow" copy,浅复制(浅克隆)
概念:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。摘一段Core Java 8th的解释:
instance of the same class and then copies the field values (including object references)
方法:类implements Cloneable,然后重写clone()方法,在clone()方法中调用super.clone()即可,没有其他操作了。
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
2、"deep" copy,深复制(深克隆)
概念:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,
深复制把要复制的对象所引用的对象都复制了一遍。
下面是一个javabean的People类的clone方法。
@Override
protected Object clone() throws CloneNotSupportedException {
People p=(People)super.clone();
//分别对属性加以克隆操作 ,可以实现属性的clone方法,简单对象也可new方法克隆。
p.sb = new StringBuffer(this.sb);
//如果是java 集合类型,则要对每个元素进行clone。
// 以list集合类为例
// myClone.listValue = new ArrayList();
// for (Element ele:this.listValue) {
// myClone.listValue.add(ele.clone());
// }
return p;
}
分享到:
相关推荐
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在处理对象复制和克隆时。...通过阅读描述中的博客文章,读者可以期待学习到如何有效地利用`clone()`,以及何时应该考虑其他复制策略。
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
4. Java中的常见API使用,例如Object类的equals、toString、clone、finalize、hashcode、getClass、notify、notifyAll、wait等方法的使用。这些方法都是在Java面向对象编程中常用的。 5. 大数值运算,提到了...
初级java笔试题编程面试大学 我最初创建它是为了成为一名软件工程师的学习主题的简短待办事项列表,但它增长到您今天看到的大列表。 完成这个学习计划后,! 你可能不需要像我一样学习。 总之,你需要的都在这里。 ...
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在处理对象复制和数据持久化时。...通过`nervouse78`的示例,你可以学习到如何在实际项目中运用`clone()`,从而提高代码的复用性和灵活性。
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
JAVA对象clone方法代码实例解析 JAVA对象clone方法是JAVA编程语言...最后,我们可以看到,JAVA语言提供了一个 Cloneable接口和clone方法来实现对象的复制,但是,它们的实现细节被隐藏了起来,留给我们去探索和学习。
本资源主要涵盖了Java的基础学习内容,特别是关于Object类、数字格式化、大数据计算以及日期处理等重要知识点。以下是这些内容的详细说明: 1. **Object类及其常见方法**: - Object类是所有Java类的根类,无论...
- Java对象创建的方式包括:new关键字、Class类的newInstance方法、Constructor类的newInstance方法、Clone方法和使用反序列化。 - 使用工厂模式可以实现对象创建和使用的分离,但同时也存在职责过于集中、系统...
clone方法的使用也是面试常考点,涉及对象复制与深浅拷贝的区别。 第三章JavaSE高级,可能涵盖异常处理、多线程、反射、集合框架等主题,这些都是Java程序员进阶必备的知识。 第四章JavaWEB基础,会涉及到Servlet...
根据给定的文件信息,我们可以总结出以下关于Java学习的心得和重要知识点: ### Java学习心得及关键概念 #### 1. 对象与类的关系 Java是一种面向对象的语言,对象是类的一个实例,而类则是对象的模板。通过定义类...
- Java创建对象的方式:可以通过new关键字直接创建,也可以通过反射机制、clone方法或反序列化等方式创建。 - 序列化和反序列化:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,反序列化则是把序列...
Java 学习介绍java-study是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1.8的使用、IO、集合、线程等等技术以及一些常用框架,netty、mina、springboot、kafka、storm、 Zookeeper、es、redis、...
Java 语言程序设计历年真题是一份非常重要的考试资源,对于 Java 程序设计的学习和考试都具有非常重要的参考价值。下面是对该资源的知识点总结: 一、Java 基础知识 * Java 版本:Java2 SE、JavaME、Java2 HE、...
这种操作常见于对象导向编程,例如在Java、Python、C#等语言中。通过克隆,我们可以创建一个原始对象的独立副本,对副本进行修改不会影响原始对象,这在数据处理和并发编程中尤其有用。 2. **深度克隆与浅克隆** -...
《Java和Android开发学习指南源码(第二版)》是一份专门为Java和Android开发者准备的珍贵资源,旨在帮助他们深入理解和实践这两种技术。这个压缩包包含的是官方git仓库的源码,虽然直接通过git clone可能遇到问题,...
【描述】:在GitHub上,开源的Java RPG游戏项目提供了一个学习和实践Java编程以及游戏开发的良好平台。开发者或爱好者可以通过查看源代码,理解游戏的逻辑结构,包括角色移动、战斗系统、物品管理、地图探索等核心...
在本压缩包"Darts-Clone-Java-Master.zip"中,包含了Java实现的DARTS算法源代码,非常适合初学者深入理解和实践时间序列分析。 DARTS的核心思想是通过自回归模型(AR,AutoRegressive)来预测未来的值,其中每个...