要让一个对象进行克隆,其实就是两个步骤:
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对象克隆方法(浅克隆、深克隆)相关推荐

  1. java对象克隆的例子_Java对象克隆

    本篇文章帮大家学习java对象克隆,包含了Java对象克隆使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制 ...

  2. Java对象查询方法:Jxpath(转译)

    Java对象查询方法:Jxpath(转译) 在JAVA对象中,如何进行有效的查询呢,这一直是个很值得探讨的问题.大家知道,在XML中,要找元素如何找呢?没错,通过XPATH 是个不错的办法,同样道理, ...

  3. java x00_有没有通过python反序列化java对象的方法

    我将java对象存储在hbase中(例如,假设我有一个对象'User',有3个参数,比如firstname.middlename和lastname).我在java中使用以下代码进行序列化Object ...

  4. Java对象克隆——浅克隆和深克隆的区别

    在Java中对象的克隆有深克隆和浅克隆之分.有这种区分的原因是Java中分为基本数据类型和引用数据类型,对于不同的数据类型在内存中的存储的区域是不同的.基本数据类型存储在栈中,引用数据类型存储在堆中. ...

  5. Java - 对象克隆

    目录 对象克隆 浅克隆 深克隆 多层克隆 对象克隆 在讨论对象克隆之前, 可能会有人说 , 不能直接new一个吗?为什么要克隆 首先关于这个问题, 直接new一个对象, 这个对象里面包含的成员变量是n ...

  6. java对象克隆详解

    概述: 当我们new一个对象时,其中的属性就会被初始化, 那么想要保存刚开始初始化的值就靠clone方法来实现, 平时我们最常见的是一个对象的引用指向另一个对象,并不是创建了两个对象. Person ...

  7. java对象克隆效率_fastclone

    fastclone 一款轻量级Java对象高效克隆框架,提供高性能的深克隆(非Object->序列化->Object这种低效率克隆).浅克隆,支持递归克隆.性能上秒杀Apache Comm ...

  8. BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...

    1.多对多添加方法 @Override public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(mod ...

  9. 比较两种php调用Java对象的方法

    Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中 的Java扩展模块,另一种是使用minij2ee应用服务器提供 ...

最新文章

  1. python作者龟叔_Python基础 — Python简介
  2. fedora ssh 安装mysql,Fedora中安装和配置OpenSSH | 学步园
  3. mysql 用户授权_mysql添加、删除用户和授权用户
  4. ibatis--百度百科
  5. django 1.8 官方文档翻译: 3-2-1 内建的视图
  6. 2020-08-22 每日一句
  7. 在命令行中使用vs编译器
  8. 新装hbuilder无法运行到iOS模拟器/无法识别ios模拟器
  9. mdpi Algorithms 期刊word 模板下载
  10. Echarts图表之堆积柱形图
  11. 最新列表!国内外核心期刊数据库收录范围汇总介绍
  12. 利用iTextsharp进行PDF页码旋转
  13. 薛定谔的猫、量子纠缠、和量子计算机
  14. 几次推广都没能火起来,腾讯直接把微视嵌入朋友圈了?
  15. 复工进行时:警惕重保期间的emotet病毒邮件
  16. Vue 使用 yarn 报错
  17. MyBatis 报错 Could not initialize class
  18. 谷哥学术2022年资源分享下载列表 3/20
  19. 关于地下管线探测技术发展的思考
  20. 如何下载并安装Visual Studio

热门文章

  1. PollardRho大整数分解
  2. Duilib教程-自动布局3-分隔条
  3. 网狐棋牌(六) DataBaseEngine 和 网狐棋牌(七) CEventService
  4. socket通信的环形缓冲
  5. 终于把CString转化为char*了
  6. SQL 查找是否存在,别再 COUNT 了,很耗费时间的
  7. 【城市沙龙】LiveVideoStack Meet | 长沙:多媒体与广电
  8. 范醒哲:敬畏自然 渴望技术 —— 新冠肺炎后对网络数据传输能力的思考
  9. 通过QUIC 0-RTT建立更快的连接
  10. 魏伟:学习音视频技术要先理论再实现