java对象克隆之深度克隆 deep clone
2015-06-14 23:07
507 查看
克隆技术默认的是浅度克隆,对于包含在对象内部的对象并没有克隆,例如对象stdA包含对象x,克隆后得到对象stdB,也包含对象x,但两个x所指向的数据成员相同。
深度克隆实例如下:
深度克隆实例如下:
package com.demo; class Book implements Cloneable{ private String name; private double price; public Book(String name, double price){ this.name = name; this.price = price; } public void setName(String name){ this.name = name; } public Object clone() throws CloneNotSupportedException{ return super.clone(); } public String toString(){ return "书名:"+ this.name + " 单价:" + this.price; } } class Student implements Cloneable{ private String name; private String sex; private Book book; public Student(String name, String sex, Book book){ this.name = name; this.sex = sex; this.book = book; } public Object clone() throws CloneNotSupportedException { Student std = null; //克隆当前对象 std = (Student)super.clone(); //克隆当前对象所包含的对象 std.book = (Book)book.clone(); return std; //return super.clone(); } public void setName(String name){ this.name = name; } public void setBook(Book book){ this.book = book; } public String toString(){ return "姓名:"+name + ", 性别" + sex + "\n借的书:" + this.book.toString(); } } public class Demo { public static void main(String[] args) throws Exception { Book book = new Book("理想国", 35); Student stdA = new Student("梅西", "男", book); //采用赋值方式 Student stdB = stdA; stdA.setName("李娜"); System.out.println("stdA:"+ stdA + "\nstdB:" + stdB); stdB = (Student) stdA.clone(); stdA.setName("梅西"); System.out.println("克隆之后:"); System.out.println("stdA: " + stdA + "\nstdB " + stdB); } }
输出结果:
stdA:姓名:李娜, 性别男 借的书:书名:理想国 单价:35.0 stdB:姓名:李娜, 性别男 借的书:书名:理想国 单价:35.0 克隆之后: stdA: 姓名:梅西, 性别男 借的书:书名:理想国 单价:35.0 stdB 姓名:李娜, 性别男 借的书:书名:理想国 单价:35.0深度克隆步骤1.克隆当前对象;2克隆当前对象所引用的对象;3返回当前对象
相关文章推荐
- java 框架基础知识(5)----注解-->Spring配置
- java 基础static关键字
- 在Servlet Filter中使用Spring容器
- Java之CyclicBarrier使用
- spring mvc messageConverters及406等问题
- java链表
- java线程和进程(运用多线程的小球碰撞游戏)
- Java 信号量 Semaphore 介绍
- java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程)
- java图形界面基础之画图(使用Graphics类从画图形到图片到gif)
- java的数组队列和泛型
- java jtable mysql 练习与思考
- java的对象克隆技术clone()之浅度克隆(shallow Clone)
- java 框架基础知识(4)----XML基础知识-->Spring配置
- Struts2----带参数转发到JSP
- java学习笔记(六):关于iterator.next()
- Java基础之基础语法
- Java中的日志——Java.util.logging、log4j、commons-logging
- Java中的return语句使用总结
- 《Java程序设计》第二次作业:MySQL数据库及Java操作MySQL数据库