- 浏览: 59604 次
- 性别:
- 来自: 南京
文章分类
最新评论
java中 克隆一个对象需要三步:
1:克隆的对象实现 Cloneable 标识接口
2:覆盖 Object 的 clone() 方法,在 clone() 方法中调用super.clone(),并把 protected 改为 public。
3:调用 clone() 克隆对象 ,如:代码第7行
克隆代码示例:
1:克隆的对象实现 Cloneable 标识接口
2:覆盖 Object 的 clone() 方法,在 clone() 方法中调用super.clone(),并把 protected 改为 public。
3:调用 clone() 克隆对象 ,如:代码第7行
克隆代码示例:
public class Test { public static void main(String[] args) { Professor p=new Professor("lisi",66); Student s1=new Student("zhaoliu",22,p); Student s2=(Student)s1.clone(); //深复制 -- 把s1的引用拷贝一份 赋值给s2 ,所以 改变s2的值 s1不改变 ,即输出(name=lisi,age=66) //Student s2=(Student)s1; //浅复制 --只把s1的引用 赋值给s2 , 所以 改变s2的值 s1也改变 ,即输出(name=wangwu,age=40) s2.getP().setName("wangwu"); s2.getP().setAge(40); System.out.println("name="+s1.getP().getName()+","+"age="+s1.getP().getAge()); } } class Professor implements Cloneable { private String name; private int age; Professor(String name, int age) { this.name = name; this.age = age; } public Object clone() { Object o = null; try { o = super.clone(); } catch (CloneNotSupportedException e) { System.out.println(e.toString()); } return o; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } } class Student implements Cloneable { private String name; private int age; private Professor p; Student(String name, int age, Professor p) { this.name = name; this.age = age; this.p = p; } public Object clone() { // Object o=null; Student o = null; try { o = (Student) super.clone(); } catch (CloneNotSupportedException e) { System.out.println(e.toString()); } o.p = (Professor) p.clone(); return o; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Professor getP() { return p; } public void setP(Professor p) { this.p = p; } }
发表评论
-
html5 跨域访问
2017-08-18 13:10 367@Configuration public class ... -
javat进程 cpu100%,解决方法
2017-07-24 16:35 376Java进程cpu100%,解决方法如下: 1.执行top ... -
eclipse 汉化
2017-06-20 12:48 365Installing the language packs O ... -
判断移动设备环境
2016-06-21 09:50 403/** * 客户端判断工具 * */ ... -
Java 文件锁
2016-06-17 09:50 349FileChannel channel FileLock ... -
并发同步列子
2016-06-16 09:30 336import java.util.concurrent.Cou ... -
java.util.concurrent 用户指南
2016-06-15 14:09 327java.util.concurrent 用户指南 -
java 反射工具
2016-06-12 11:07 463java 反射工具 package com.util; ... -
linux java 安装
2016-04-23 10:19 356下载jdk-7u79-linux-x64.tar.gz文件,解 ... -
对象序列化和反序列化
2016-04-14 20:28 407当一个对象的实例变量 ... -
java 垃圾回收机制
2016-03-02 11:08 298http://www.cnblogs.com/dartagn ... -
ngrok_windows.rar 映射外网
2016-02-29 16:50 459ngrok_windows.rar 映射外网 -
性能优化技巧
2015-09-09 08:48 5811. 尽量使用final修饰符。 带有final修饰符的类是 ... -
java 反编译工具
2015-02-14 17:05 587java 反编译工具 -
java 中对象比较大小
2010-06-10 22:36 4293java 中对象比较大小 java 中对象比较大小有两种方法 ...
相关推荐
现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生这个词语确实很“火”过一阵子,在java中也有这么一个概念,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Clone机制是如何工作的...
java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)
查看了很多文章对于clone()方法讲解都不慎透彻,特别是对于深层克隆的讲解语言晦涩难懂,很难理解,包括Oracle公司出版的JDK帮助文档也讲的不清楚,本人通过具体实践通过浅显易懂的语言详细讲解了clone()方法。...
被克隆对象.clone()出的对象,是被克隆对象的当前状态 * 2.被克隆对象 如果返回的值是 super.clone(); 此时属于浅拷贝 * * 浅拷贝 * 1)成员变量是,基本数据类型,此时浅拷贝是值传递。其中一个对象的值修改后...
想必大家对克隆都有耳闻,世界上第一只克隆羊多莉就是利用细胞核移植技术...其实在Java中也存在克隆的概念,即实现对象的复制。本文将尝试介绍一些关于Java中的克隆和一些深入的问题,希望可以帮助大家更好地了解克隆。
1 JAVA认识 2 JAVA数据类型 3 面向对象程序设计 4 JAVA集合 5 JAVA反射机制 6 JAVA注解(ANNOTATION) 7 JAVA中的异常类 ...20 JAVA克隆CLONE(复制) 21 JAVA 网络编程 22 JAVA 其他未归类 23 JNI概述
主要介绍了Java利用序列化实现对象深度clone的方法,实例分析了java序列化及对象克隆的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
一般在Java里创建一个对象,有常用的几种方式 ...克隆调用现有对象的 clone()方法 反序列化调用 java.io.ObjectInputStream 的 getObject()方法反序列化 各自适合的场景,面对参数的变化,本资源提供了最优解决方案
Object类中的clone方法clone()方法的作用克隆方法用于创建对象的拷贝,为了使用clone方法,类必须实现java.lang.Cloneable接口
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct...
开发中,打断对象间的引用关系,只想下个副本的情况无处不在,clone一个对象就在所难免了。 JavaScript中,简单的方法就是用JSON函数,将对象stringify成字符串,再parse成一个新对象。要么就是从网上搜个代码,...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...
概述对象克隆库。 支持可扩展的浅层和深层对象克隆策略。用法下面是一个关于如何使用库的示例 // Example TestObject clone = new ObjectCloner().deepClone(originalTestObject);有关更多示例,请参阅 junit 测试...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...
当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。 47.java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象...
由于RedisMock运行方式,我们不能说克隆该对象并维护线程安全。 如果两个RedisMock对象共享相同的内部数据结构,则有可能在两个对象之间进行并发修改。 因此, RedisMock不支持clone 。支持的命令目标是与所有
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...