Java基础学习 —— 对象的克隆
对象的克隆分为对象的浅克隆和深克隆
一、对象的浅克隆
注意事项:
1.如果一个对象需要调用clone的方法克隆,那么该对象必须要实现Cloneable接口
2.Cloneable对象只是一个标识对象,并没有方法
public class demo1 {
public static void main(String[] args) throws Exception {
Person person = new Person("001","狗娃");
Person person2 = person.clone();
person2.setName("abd");
System.out.println(person.toString());
System.out.println(person2.toString());
}
}
输出结果?
编号:001姓名:狗娃
编号:001姓名:abd
3.对象的浅克隆,在克隆一个对象的时候,如果被克隆的对象中维护了另外一个类的对象,这时候只是克隆一个对象的地址而没有把另外一个对象也克隆一份。

如图所示,对象的浅克隆只是克隆了address对象的地址,这样我们修改p2对象的时候,会将其内存地址的内容一并修改,所以输出city结果是一样的。
4.对象的浅克隆,也不会调用到构造方法的。
二、对象的深克隆
对象的深克隆:对象的深克隆,就是利用了对象的输入输出流,把对象先写到文件里,然后再读取对象的信息,这个过程称为对象的深克隆。
public class demo2 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
Adress adress = new Adress("北京");
Person person = new Person("002","sony猪",adress);
writObj(person);
Person person2 = readObj(person);
person2.adress.city = "深圳";
System.out.println("person1:"+person.toString());
System.out.println("person2:"+person2.toString());
}
public static Person readObj(Person person) throws IOException, ClassNotFoundException{
FileInputStream fileInputStream = new FileInputStream("E:\\obj.txt");
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
return (Person) objectInputStream.readObject();
}
public static void writObj(Person person) throws IOException{
//建立文件的输出流对像
FileOutputStream fileOutputStream = new FileOutputStream("E:\\obj.txt");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(person);
objectOutputStream.close();
}
}
输出结果?
person1:编号:002姓名:sony猪 地址:北京
person2:编号:002姓名:sony猪 地址:深圳
Java基础学习 —— 对象的克隆的更多相关文章
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- [转帖]java基础学习总结——多态(动态绑定)
https://www.cnblogs.com/xdp-gacl/p/3644035.html 多态的概念 java基础学习总结——多态(动态绑定) 一.面向对象最核心的机制——动态绑定,也叫多态
- Java基础学习(2)
Java基础学习(二) 面向对象 对象:客观存在的事物 面向对象:人具体关注的事物的某些信息 类:是模子,确定对象会拥有的特征(属性)和行为(方法) 对象的属性:对象具有的各种特征 对象的方法:对象能 ...
- Java基础学习(4)
Java基础学习(四) String类 特点:创建后不可再修改,看起来的修改只是创建了新的对象 常用方法 StringBuilder类 目的:解决String类频繁创建对象的问题 常用方法 特点:非线 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
随机推荐
- STM32初学Keil4编译时出现 Error:Failed to execute 'BIN40/Armcc'
一种是在系统开始--运行里输入cmd,查看armcc状态.详情见推文: http://blog.csdn.net/hicui/article/details/7350805(笔记记录,请勿见怪) 都没 ...
- CVE-2016-3714 - ImageMagick 命令执行
ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就 ...
- 关于个人编辑器sublime text3使用指南
用过了好多编辑器,前些年用的zend studio,phpstorm近两年转为nodepad++(因为写的语言种类比较多了,shell,python,php,前端等),相对于nodepad++, s ...
- Android service 服务的应用之电话监听器以及短信监听器
首先建立一个项目工程文件,如下图所示:
- Presto0.157版本单节点部署教程
因为Presto版本的更新速度较快,所以最好按照对应版本的教程进行部署,博主之前看错了版本号,拿0.100版本的教程来部署0.157版本,结果导致部署失败. 官网:https://prestodb.i ...
- 国内首款开源的互联网支付系统roncoo-pay
roncoo-pay是国内首款开源的互联网支付系统,其核心目标是汇聚所有主流支付渠道,打造一款轻量.便捷.易用,且集支付.资金对账.资金清结算于一体的支付系统,满足互联网业务系统的收款和业务资金管理需 ...
- mybatis 详解(十一)------ mybatis和spring整合
想要整合mybatis和spring,那么我们首先要知道这两个框架是干嘛的,对于mybatis我们前面几篇博客已经有了很详细的介绍,我们通过加载mybatis-configuration.xml 文件 ...
- Ubuntu16.04LTS 环境下编译安装Xen
一.编译安装xen4.6过程 操作系统使用ubuntu16.04,通过下载xen4.6的源代码并编译安装来创建xen4.6环境. 一.依赖包的安装 sudo apt-get install gcc m ...
- 纯CSS实现table表头固定(自创备忘)
因为之前约定时候产品没说要表头固定,这次迭代测试突然提出这个需求,而且不知道因为什么未知原因非要这样不可--因为之前用了table标签做表单,而且也没用插件,这下就难了点,找另外一个前端前辈妹子商量了 ...
- 【转】DHCP协议详解
协议分析 - DHCP协议解码详解 DHCP协议简介 DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作 ...