Java对象克隆方法(浅克隆、深克隆)
要让一个对象进行克隆,其实就是两个步骤:
1. 让该类实现java.lang.Cloneable接口;
2. 重写(override)Object类的clone()方法。
上面的克隆方法其实是浅克隆,顾名思义就是很表面的很表层的克隆,比如我们要克隆User对象,浅克隆只克隆他自身以及他包含的所有对象的引用地址。
而深克隆,就是非浅克隆。克隆除自身以外所有的对象,包括自身所包含的所有对象实例。至于深克隆的层次,由具体的需求决定,也有“N层克隆”一说。
下面是使用java.lang.Serializable来实现对象的深度克隆的一个工具类。
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public abstract class BeanUtil {@SuppressWarnings("unchecked")public static <T> T cloneTo(T src) throws RuntimeException {ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream();ObjectOutputStream out = null;ObjectInputStream in = null;T dist = null;try {out = new ObjectOutputStream(memoryBuffer);out.writeObject(src);out.flush();in = new ObjectInputStream(new ByteArrayInputStream(memoryBuffer.toByteArray()));dist = (T) in.readObject();} catch (Exception e) {throw new RuntimeException(e);} finally {if (out != null)try {out.close();out = null;} catch (IOException e) {throw new RuntimeException(e);}if (in != null)try {in.close();in = null;} catch (IOException e) {throw new RuntimeException(e);}}return dist;}
}
Java对象克隆方法(浅克隆、深克隆)相关推荐
- java对象克隆的例子_Java对象克隆
本篇文章帮大家学习java对象克隆,包含了Java对象克隆使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制 ...
- Java对象查询方法:Jxpath(转译)
Java对象查询方法:Jxpath(转译) 在JAVA对象中,如何进行有效的查询呢,这一直是个很值得探讨的问题.大家知道,在XML中,要找元素如何找呢?没错,通过XPATH 是个不错的办法,同样道理, ...
- java x00_有没有通过python反序列化java对象的方法
我将java对象存储在hbase中(例如,假设我有一个对象'User',有3个参数,比如firstname.middlename和lastname).我在java中使用以下代码进行序列化Object ...
- Java对象克隆——浅克隆和深克隆的区别
在Java中对象的克隆有深克隆和浅克隆之分.有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的.基本数据类型存储在栈中,引用数据类型存储在堆中. ...
- Java - 对象克隆
目录 对象克隆 浅克隆 深克隆 多层克隆 对象克隆 在讨论对象克隆之前, 可能会有人说 , 不能直接new一个吗?为什么要克隆 首先关于这个问题, 直接new一个对象, 这个对象里面包含的成员变量是n ...
- java对象克隆详解
概述: 当我们new一个对象时,其中的属性就会被初始化, 那么想要保存刚开始初始化的值就靠clone方法来实现, 平时我们最常见的是一个对象的引用指向另一个对象,并不是创建了两个对象. Person ...
- java对象克隆效率_fastclone
fastclone 一款轻量级Java对象高效克隆框架,提供高性能的深克隆(非Object->序列化->Object这种低效率克隆).浅克隆,支持递归克隆.性能上秒杀Apache Comm ...
- BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...
1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...
- 比较两种php调用Java对象的方法
Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中 的Java扩展模块,另一种是使用minij2ee应用服务器提供 ...
最新文章
- python作者龟叔_Python基础 — Python简介
- fedora ssh 安装mysql,Fedora中安装和配置OpenSSH | 学步园
- mysql 用户授权_mysql添加、删除用户和授权用户
- ibatis--百度百科
- django 1.8 官方文档翻译: 3-2-1 内建的视图
- 2020-08-22 每日一句
- 在命令行中使用vs编译器
- 新装hbuilder无法运行到iOS模拟器/无法识别ios模拟器
- mdpi Algorithms 期刊word 模板下载
- Echarts图表之堆积柱形图
- 最新列表!国内外核心期刊数据库收录范围汇总介绍
- 利用iTextsharp进行PDF页码旋转
- 薛定谔的猫、量子纠缠、和量子计算机
- 几次推广都没能火起来,腾讯直接把微视嵌入朋友圈了?
- 复工进行时:警惕重保期间的emotet病毒邮件
- Vue 使用 yarn 报错
- MyBatis 报错 Could not initialize class
- 谷哥学术2022年资源分享下载列表 3/20
- 关于地下管线探测技术发展的思考
- 如何下载并安装Visual Studio