如何实现对象克隆

有两种方式:
1)实现Cloneable接口并重写Object类中的clone()方法;
2) 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。
注意:基于序列化和反序列化实现的克隆不仅仅是深度克隆,更重要的是通过泛型限定,可以检查出要克隆的对象是否支持序列化,这项检查是编译器完成的,不是在运行时抛出异常,这种是方案明显优于使用Object类的clone方法克隆对象。让问题在编译的时候暴露出来总是优于把问题留到运行时。

本题涉及java知识点分析

java clone()方法

Object对象有个clone()方法,clone方法返回与当前对象的一个副本对象。可以通过操作副本对象而不影响当前对象:实现了对象中各个属性的复制,但它的可见范围是protected的,所以实体类使用克隆的前提是:
① 实现Cloneable接口,这是一个标记接口,自身没有方法。 
② 覆盖clone()方法,可见性提升为public。

Java 深度克隆

利用序列化实现深度克隆
把对象写到流里的过程是序列化(Serialization)过程;而把对象从流中读出来的过程则叫反序列化(Deserialization)过程。应当指出的是,写到流里的是对象的一个拷贝,而原对象仍然存在于JVM里面。
在Java语言里深度克隆一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的拷贝)写到一个流里(序列化),再从流里读回来(反序列化),便可以重建对象。

希望对大家有所帮助。

常见Java面试题之如何实现对象克隆相关推荐

  1. 「面试必备」常见Java面试题大综合 马云见了都点赞

    一.Java基础 1.Arrays.sort实现原理和Collections.sort实现原理 答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSor ...

  2. 常见Java面试题之静态变量和实例变量的区别

    静态变量和实例变量的区别有哪些? 静态变量和实例变量可能大多数同学用的比较多,但是相关阐述并不是很常见,尤其对新手同学可以不能清楚表达. 静态变量和实例变量也是最经常遇到的一个基础java面试题,不管 ...

  3. 小猿圈之常见java面试题总结,你学会了吗?

    今年的6月份又到了,又是一年一度的毕业季,但是你真的做好准备了吗?.应届毕业生很多,怎么让你自己在这群人中脱颖而出呢?那你就要做万分的准备,不打没准备的仗,下面小猿圈java讲师为你总结了常见的jav ...

  4. 2020最新常见Java面试题及答案汇总

    一.Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java ...

  5. 常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)

    ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. 这篇文章介绍的常见面试题是关于重载(overloading)方法和重写( ...

  6. 常见Java面试题 – 第二部分:equals与==

    http://www.importnew.com/2223.html ImportNew注: 本文是ImportNew编译整理的Java面试题系列文章之一.你可以从这里查看全部的Java面试系列. Q ...

  7. (免费领)Java大厂面试题:如何实现对象克隆?

    try-catch-finally 中哪个部分可以省略? try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同时省略,也就是说有 try 的时候,必须后面 ...

  8. Java面试题 基本类型和包装类对象使用 == 和 equals进行比较的结果?

    Java面试题 (基础 与 语法) 基本类型 和 包装类 对象使用 == 和 equals 进行比较的结果? 1.值不同,使用 == 和 equals() 比较都返回 false 2.值相同 使用 = ...

  9. 2021年面试,整理全网初、中、高级常见Java面试题

    面试题答案私信[面试]即可获取,500+道面试题.内容中包含基础.集合.并发.JVM.Spring.Spring MVC.Spring Boot.Spring Cloud.Dubbo.MySQL.Re ...

最新文章

  1. android 监控app卸载,Android应用监听自身卸载
  2. 干了10年软件工程师,我学到10个教训
  3. 数据库索引背后的数据结构
  4. ckplayer---vue
  5. wxWidgets:wxFileSystem概述
  6. 使用Go开发gRPC
  7. 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告
  8. Java入门算法(数据结构篇)丨蓄力计划
  9. (JAVA)Object类之toString()和equals()
  10. 程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰
  11. Mybatis源码本地化构建Demo
  12. convert.todatetime指定日期格式_java组件huTool日期DateUtil工具的使用
  13. go 输入输出流(io)
  14. java dll 调用方法_关于Java调用dll的方法 | 学步园
  15. 实现国标GB/T28181流媒体服务解决方案EasyGBS之GB35114和GB28181的注册信令流程简介
  16. dechex() 函数
  17. 登录微软账户后远程桌面连接提示用户名错误
  18. 20191129每周精品之编程
  19. 我,35岁程序员,离职前是这么做的
  20. 济南少儿学国画培训班

热门文章

  1. 旋钮编码器c代码_人脸合成效果媲美StyleGAN,而它是个自编码器
  2. php网页论坛制作教程,PHP开发 小型论坛教程之登录HTML页面
  3. mysql win10 5.5_win10上MySql5.5版本升级到5.7
  4. __getattr__在python2.x与python3.x中的区别及其对属性截取与代理类的影响
  5. niceScroll在ie11和edge浏览器上面滚动时抖动问题
  6. python之路_计算机编码及运算符介绍
  7. 08-面向对象----
  8. 面向对象基础及UML建模语言
  9. std::priority_queue
  10. 逆波兰表达式简单介绍