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对象克隆相关推荐

  1. java 如何实现对象克隆_Java对象克隆

    Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制对象的内容.要支持克隆操作,请在类中实现clone()方法.Object类中的clone()方法的声明如下: protected Obj ...

  2. java浅度克隆_java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说 ...

  3. java 子类克隆_Java对象克隆了解

    1.java接口中有一种空的接口叫标识接口,这种接口值起到标识作用. 2.要实现java对象克隆需要用到Object类的 protected Object clone() throws CloneNo ...

  4. java初始化实例化_Java对象的创建过程:类的初始化与实例化

    一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象 ...

  5. java 对象复活_Java对象复活

    java 对象复活 总览 收集覆盖了finalize()的对象之后,将其添加到终结处理队列中,以在调用每个对象的finalize()方法之后进行清理. 如果您复活了物体,会发生什么? 何时定案? fi ...

  6. java jol原理_Java对象布局(JOL)实现过程解析

    java对象布局JOL(java object layout),描述对象在堆内存的布局.如下图: 1.markword 固定长度8byte,描述对象的identityhashcode,分代年龄,锁信息 ...

  7. java开源对象池_JAVA 对象池

    GenericObjectPool利用一个org.apache.commons.collections.CursorableLinkedList对象来保存对象池里的对象.这种对象池的特色是: 可以设定 ...

  8. java 对象结构_java对象的结构

    在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在Java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢? 要知道一个对象 ...

  9. java中对象类型转换_Java 对象类型的转换

    对象类型的转换在Java编程中经常遇到,主要分为向上转型和向下转型,但一定要记住,无论是向上转型还是向下转型,两个类之间必须有继承关系.先来看看基本概念. 向上转型又被称作自动类型转换,就是子类引用的 ...

  10. java list对象排序_Java 对象集合List排序的5种方式

    目标明确 排序对象类 public class Student{ private String name; private Integer age; public Student(String nam ...

最新文章

  1. Tesorflow源代码安装方式以及错误的解决方法
  2. C语言#line预处理器
  3. Spring的事务属性
  4. java面试资料整理(高级必备)
  5. html中的js代码测试,w3school JS测验
  6. 想从事区块链开发? 你应该这么做
  7. 如何在Mac上恢复未保存的word文档
  8. Windows 安全补丁
  9. 【唐诗学习】五、山水田园诗派代表
  10. 相机内参,外参的物理意义
  11. 处理器CPU概念及CPU多线程
  12. mame模拟器添加按键实现
  13. 面试知识点——(金三银四你需要的是她)
  14. python使用urllib发送post请求_python使用urllib2提交http post请求的方法
  15. 聊一聊IBM对于全球半导体产业的贡献
  16. oracle缩减表空间大小,Oracle表空间释放与增加表空间大小
  17. 云服务器存档修改器,服务器修改器
  18. 用户画像标签数据开发之标签相似度计算
  19. Qt低延时/可集成嵌入的网络播放器 –soundTouch的使用
  20. 应用kaggle进行机器学习项目开发

热门文章

  1. C#多线程时对同一资源加锁实现互斥访问
  2. 小程序onload_微信小程序开发入门之共享账本(十四)
  3. python中级程序员是什么水准_程序员进阶:一篇搞懂Python中级应用
  4. python控制语句实验报告,python流程控制语句案例练习
  5. HMI使用自定义控件流程
  6. WINCE Driver 心得总结
  7. 南京大学c语言试卷,2007年4月南京大学C语言期中试题.doc
  8. MySQL笔记——DQL查询数据
  9. 应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt
  10. 【转】彻底理解cookie,session,token