java 对象克隆_JAVA对象克隆
1> 为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
2> 在派生类中覆盖基类的clone(),并声明为public。
3> 在派生类的clone()方法中,调用super.clone()。
4> 在派生类中实现Cloneable接口。
4> 没有抽象方法的接口叫标识接口。
5> 为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object 的clone()方法能识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原 始对象的内容一一复制到新的对象空间去。
* 浅克隆是针对没有引用类型的变量来克隆。针对引用类型的克隆应该用Deeply Clone。
浅克隆:
Code:
class FleetClone
{
public static void main(String[] args)
{
Professor p=new Professor("feiyang",23);
Student s1=new Student("zhangshan",18,p);
Student s2=(Student)s1.clone();
s2.p.name="feifei";
s2.p.age=30;
System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
}
}
class Professor
{
String name;
int age;
Professor(String name,int age)
{
this.name=name;
this.age=age;
}
}
class Student implements Cloneable
{
Professor p;
String name;
int age;
Student(String name, int age,Professor p)
{
this.name=name;
this.age=age;
this.p=p;
}
public Object clone()
{
Object o=null;
try
{
o=super.clone();
}
catch(CloneNotSupportedException e)
{
e.printStackTrace();
}
return o;
}
}
改变学生s2的教授信息,打印s1教授信息,结果为:name=feifei,age=30.产生这个结果是因为String是一个常量类型.
深克隆
code:
class DeeplyClone
{
public static void main(String[] args)
{
Professor p=new Professor("feiyang",23);
Student s1=new Student("zhangshan",18,p);
Student s2=(Student)s1.clone();
s2.p.name="Bill.Gates";
s2.p.age=30;
System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
}
}
class Professor implements Cloneable
{
String name;
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)
{
e.printStackTrace();
}
return o;
}
}
class Student implements Cloneable
{
Professor p;
String name;
int age;
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)
{
e.printStackTrace();
}
o.p=(Professor)p.clone();
return o;
}
}
打印结果为:name=Bill.Gates,age=30,这就是深克隆.
java 对象克隆_JAVA对象克隆相关推荐
- java 如何实现对象克隆_Java对象克隆
Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制对象的内容.要支持克隆操作,请在类中实现clone()方法.Object类中的clone()方法的声明如下: protected Obj ...
- java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆
为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说 ...
- java 子类克隆_Java对象克隆了解
1.java接口中有一种空的接口叫标识接口,这种接口值起到标识作用. 2.要实现java对象克隆需要用到Object类的 protected Object clone() throws CloneNo ...
- java初始化实例化_Java对象的创建过程:类的初始化与实例化
一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...
- java 对象复活_Java对象复活
java 对象复活 总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理. 如果您复活了物体,会发生什么? 何时定案? fi ...
- java jol原理_Java对象布局(JOL)实现过程解析
java对象布局JOL(java object layout),描述对象在堆内存的布局.如下图: 1.markword 固定长度8byte,描述对象的identityhashcode,分代年龄,锁信息 ...
- java开源对象池_JAVA 对象池
GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象.这种对象池的特色是: 可以设定 ...
- java 对象结构_java对象的结构
在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在Java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢? 要知道一个对象 ...
- java中对象类型转换_Java 对象类型的转换
对象类型的转换在Java编程中经常遇到,主要分为向上转型和向下转型,但一定要记住,无论是向上转型还是向下转型,两个类之间必须有继承关系.先来看看基本概念. 向上转型又被称作自动类型转换,就是子类引用的 ...
- java list对象排序_Java 对象集合List排序的5种方式
目标明确 排序对象类 public class Student{ private String name; private Integer age; public Student(String nam ...
最新文章
- Tesorflow源代码安装方式以及错误的解决方法
- C语言#line预处理器
- Spring的事务属性
- java面试资料整理(高级必备)
- html中的js代码测试,w3school JS测验
- 想从事区块链开发? 你应该这么做
- 如何在Mac上恢复未保存的word文档
- Windows 安全补丁
- 【唐诗学习】五、山水田园诗派代表
- 相机内参,外参的物理意义
- 处理器CPU概念及CPU多线程
- mame模拟器添加按键实现
- 面试知识点——(金三银四你需要的是她)
- python使用urllib发送post请求_python使用urllib2提交http post请求的方法
- 聊一聊IBM对于全球半导体产业的贡献
- oracle缩减表空间大小,Oracle表空间释放与增加表空间大小
- 云服务器存档修改器,服务器修改器
- 用户画像标签数据开发之标签相似度计算
- Qt低延时/可集成嵌入的网络播放器 –soundTouch的使用
- 应用kaggle进行机器学习项目开发
热门文章
- C#多线程时对同一资源加锁实现互斥访问
- 小程序onload_微信小程序开发入门之共享账本(十四)
- python中级程序员是什么水准_程序员进阶:一篇搞懂Python中级应用
- python控制语句实验报告,python流程控制语句案例练习
- HMI使用自定义控件流程
- WINCE Driver 心得总结
- 南京大学c语言试卷,2007年4月南京大学C语言期中试题.doc
- MySQL笔记——DQL查询数据
- 应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt
- 【转】彻底理解cookie,session,token