1  为什么要使用克隆

2  如何实现克隆对象

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;public class MyUtil {private MyUtil() {throw new AssertionError();}@SuppressWarnings("unchecked")public static <T extends Serializable> T clone(T obj) throws Exception {ByteArrayOutputStream bout = new ByteArrayOutputStream();ObjectOutputStream oos = new ObjectOutputStream(bout);oos.writeObject(obj);ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());ObjectInputStream ois = new ObjectInputStream(bin);return (T) ois.readObject();// 说明:调用ByteArrayInputStream//或ByteArrayOutputStream对象的close方法没有任何意义// 这两个基于内存的流只要垃圾回收器清理对象就能够释放资源,//这一点不同于对外部资源(如文件流)的释放}
}
//
import java.io.Serializable;/*** 人类* @author nnngu**/
class Person implements Serializable {private static final long serialVersionUID = -9102017020286042305L;private String name;    // 姓名private int age;        // 年龄private Car car;        // 座驾public Person(String name, int age, Car car) {this.name = name;this.age = age;this.car = car;}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 Car getCar() {return car;}public void setCar(Car car) {this.car = car;}@Overridepublic String toString() {return "Person [name=" + name + ",age=" + age + ", car=" + car + "]";}}
/
/*** 小汽车类* @author nnngu**/
class Car implements Serializable {private static final long serialVersionUID = -5713945027627603702L;private String brand;       // 品牌private int maxSpeed;       // 最高时速public Car(String brand, int maxSpeed) {this.brand = brand;this.maxSpeed = maxSpeed;}public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public int getMaxSpeed() {return maxSpeed;}public void setMaxSpeed(int maxSpeed) {this.maxSpeed = maxSpeed;}@Overridepublic String toString() {return "Car [brand=" + brand + ", maxSpeed=" + maxSpeed + "]";}}
/
class CloneTest {public static void main(String[] args) {try {Person p1 = new Person("郭靖", 33, new Car("Benz", 300));Person p2 = MyUtil.clone(p1);   // 深度克隆p2.getCar().setBrand("BYD");// 修改克隆的Person对象p2关联的汽车对象的品牌属性// 原来的Person对象p1关联的汽车不会受到任何影响// 因为在克隆Person对象时其关联的汽车对象也被克隆了System.out.println(p1);} catch (Exception e) {e.printStackTrace();}}
}
//

3  序列化与反序列实现克隆的好处

4 深拷贝与浅拷贝

第五模块 为什么要使用克隆、如何实现克隆对象、序列化与反序列实现克隆的好处、深拷贝与浅拷贝相关推荐

  1. 什么要使用克隆、如何实现克隆对象、序列化与反序列实现克隆的好处、深拷贝与浅拷贝

    1.为什么要使用克隆 对象的拷贝需要使用克隆,如果想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要使用克隆了,Java语言中克隆针对的是类的实例. 2.如何实现克隆对象 有两种方式: ...

  2. python文件操作和模块_Python(五)--模块与文件操作

    Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...

  3. python 学习_第五模块 DMO

    python 学习_第五模块 DMO 1. 节点 <!DOCTYPE html> <html lang="en"> <head><meta ...

  4. python中copy模块的使用,深拷贝和浅拷贝

    python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...

  5. Java中克隆的用法,深拷贝、浅拷贝概念的引出

    一 什么是克隆 克隆就是根据已有对象复制出另一个对象.比如用A克隆出B,一般在java中有如下约定: // A与B的引用不同 A!=B // A与B的类相同 A.getClass == B.getCl ...

  6. java递归深度克隆_递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝。...

    手写递归方法 //定义检测数据类型的功能函数 function checkedType(target) { return Object.prototype.toString.call(target). ...

  7. Java提高—对象克隆(复制)/对象属性拷贝

    对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byt ...

  8. java对象序列化克隆_Java8基础知识(三)对象克隆与序列化

    对象克隆 对象克隆最简单的方式是:将对原对象的引用直接传给一个新的副本变量.这种方式存在很大的缺陷,两个变量中任何一个变量的改变都会影响另一个变量. 浅拷贝 利用Object类的clone方法,能够创 ...

  9. java对象深克隆_JAVA中对象的克隆及深拷贝和浅拷贝

    使用场景: 在日常的编程过程 中,经常会遇到,有一个对象OA,在某一时间点OA中已经包含了一些有效值 ,此时可能会需一个和OA完全相对的新对象OB,并且要在后面的操作中对OB的任何改动都不会影响到OA ...

最新文章

  1. 游戏开发论坛_OPPO开发者大会前瞻:见证OPPO智能服务新生态
  2. glance系列二:glance部署及操作
  3. Java基础:常见对象
  4. 前端学习(1738):前端调试值之快速切换pc和手机端
  5. Golang Web入门(2):如何实现一个RESTful风格的路由
  6. 季节性的分析才不简单,小心不要在随机数据中也分析出季节性...
  7. 设计模式---外观模式(C++实现)
  8. f和摄氏度怎么换算_华氏度怎么换算成摄氏度啊?
  9. 亚马逊大赛:AI与人聊天20分钟就能赢百万美元 | 揭秘
  10. 【PHP实现微信公众平台开发—基础篇】第2章 微信公众账号及申请流程详解
  11. 关于centos7重启报错:[sdb] Assuming drive cache: write through [sda] Assuming drive 解决如下
  12. Bable的基本使用
  13. vs写c语言快捷键,vs快捷键
  14. 滚动 下拉简单实现分页
  15. arm64 ext指令图解
  16. [nginx代理配置][nginx proxy_pass][nginx从一台服务器代理到另外一台服务器,浏览器地址不改变]
  17. 项目经理的专业面试10条经验总结
  18. CRM如何进行客户关系管理
  19. XCTF攻防世界BABYRE逆向
  20. 为什么电脑唯独搜不到自己家wifi?

热门文章

  1. 地图结合echarts
  2. ICMP 使用wireshark抓包
  3. OGRE 实现光晕 LensFlare-镜头眩光
  4. 云计算时代,聪明的企业都这么干了!
  5. 明基BenQ“蓝朋友”激光商务投影机正式发售
  6. live on/long for/limit to等动词词组
  7. 通过修改注册表优化win7性能
  8. 自信+恒心=一切皆有可能(转载)
  9. 关于360杀毒之后IE浏览器打开报错问题的解决!
  10. java socket实现桌面右下角弹窗_java实现桌面右下角弹窗效果