java的克隆分为深克隆和浅克隆:

了解克隆clone我们必须要了解

1.首先,要了解什么是克隆,怎么实现克隆。

2.其次,你要大概知道什么是地址传递,什么是值传递。

3.最后,你要知道你为什么使用这个clone方法

Cloneable接口的作用:

Object类中的clone()是protected的方法,在没有重写Object的clone()方法且没有实现Cloneable接口的实例上调用clone方法,会报CloneNotSupportedException异常。

实现Cloneable接口仅仅是用来指示Object类中的clone()方法可以用来合法的进行克隆,即实现了Cloneable接口在调用Object的clone方法时不会再报CloneNotSupportedException异常。

clone方法:

类在重写clone方法的时候,要把clone方法的属性设置为public。

为什么需要克隆?

在实际编程过程中,会需要创建与已经存在的对象A的值一样的对象B,但是是与A完全独立的一个对象,即对两个对象做修改互不影响,这时需要用克隆来创建对象B。通过new一个对象,然后各个属性赋值,也能实现该需求,但是clone方法是native方法,native方法的效率一般远高于非native方法。

怎么实现克隆?

在要克隆的类要实现Cloneable接口和重写Object的clone()方法。

浅克隆

对于Object类中的clone()方法产生的效果是:现在内存中开辟一块和原始对象一样的内存空间,然后原样拷贝原始对象中的内容。对基本数据类型来说,这样的操作不会有问题,但是对于非基本类型的变量,保存的仅仅是对象的引用,导致clone后的非基本类型变量和原始对象中相应的变量指向的是同一个对象,对非基本类型的变量的操作会相互影响。

结论:

1、克隆一个对象不会调用对象的构造方法。

2、clone()方法有三条规则:1)x.clone() != x;

2)x.clone().getClass() == x.getClass(); 3)一般情况下x.clone().equals(x);

3)不是必须要满足的。

3、对对象基本数据类型的修改不会互相影响,浅克隆对对象非基本数据类型的修改会相互影响,所以需要实现深克隆。

深克隆

深克隆除了克隆自身对象,还对其非基本数据类型的成员变量克隆一遍。

深克隆的步骤:

1、首先克隆的类要实现Cloneable接口和重写Object的clone()方法。

2、在不引入第三方jar包的情况下,可以使用两种方法:1)先对对象进行序列化,紧接着马上反序列化

2)先调用super.clone()方法克隆出一个新对象,然后手动给克隆出来的对象的非基本数据类型的成员变量赋值。

在数据结构比较复杂的情况下,序列化和反序列化可能实现起来简单,方法2)实现比较复杂。经测试2)会比1)的执行效率高。

java clone原理_cloneAble接口实现clone()原理相关推荐

  1. 微计算机原理与接口,微计算机原理与接口技术概要

    <微计算机原理与接口技术概要>由会员分享,可在线阅读,更多相关<微计算机原理与接口技术概要(40页珍藏版)>请在人人文库网上搜索. 1.1.微机原理和接口技术讲座教师:余寿谦2 ...

  2. 微型计算机原理及其接口技术,微机原理及接口技术

    微型计算机原理及接口技术是理工科大学生.计算机应用的研究人员及工程技术人员在完成了计算机入门及电路基础理论学习之后,继续向高层次发展而必须研修的一门重要的专业基础课,也是相关专业的研究生入学考试的科目 ...

  3. java cloneable_java开发——Cloneable接口、clone()方法和深浅拷贝

    1.实现Cloneable接口表明该类的对象是允许克隆的. 2.允许克隆的意思是:可以调用clone()方法. 3.深拷贝还是浅拷贝,取决于如何重写Object的clone()方法. 4.原对象和克隆 ...

  4. java幂等性原理_Java接口幂等性设计原理解析

    在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订 ...

  5. java的cloneable_Java的Cloneable接口和clone方法

    1. 克隆的用处 在日常编码中我们经常需要产生某个对象的副本,这里的副本并不是指向同一个对象的不同引用,而是与当前对象状态一模一样的另一个新的对象.如果使用单纯的引用赋值,会发生什么效果呢? 我们可以 ...

  6. TYPE-C接口的工作原理图文详解

    TYPE-C接口的工作原理图文详解 发表于 2018-01-29 09:53:53 电子常识 +关注 2016年,有一个名词在手机上非常火,几乎所有的旗舰手机都会提到这个名词,说到这,大家应该都够猜到 ...

  7. clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝

    导读:本文将主要讨论设计模式--原型模式中,关于cloneable接口及浅拷贝与深拷贝的概念. 原型模式的理解 关于原型模式的理解,我在网上发现一个有趣且助于理解原型模式的例子在这里分享一下:火影忍者 ...

  8. Java中的深克隆和浅克隆的原理及三种方式实现深克隆

      本文详细介绍了Java中的浅克隆和深克隆的概念,及案例演示如何实现深克隆! 文章目录 1 克隆概述 2 深克隆实现 3 案例 3.1 测试普通clone方法--浅克隆 3.2 使用重写后的clon ...

  9. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27

    Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27 1. Jna简单介绍1 2. Jna范例halo owrld1 3. Jna概念2 3.1. (1)需 ...

最新文章

  1. 恢复误删的进程在使用的文件【转】
  2. 算法笔记 --- 记忆搜索算法 --- 动态规划算法
  3. Linux Kernel TCP/IP Stack — L2 Layer — Traffic Control(流量控制)
  4. 基本运算符与if while详解:
  5. mac os mysql 命令_Mac环境下MySQL的安装和基本命令的使用
  6. spacy库的安装与使用_为 SpaCy 提供的中文数据模型
  7. Android官方开发文档Training系列课程中文版:电池续航时间优化之按需开启广播接收器
  8. linux环境变量如何设置
  9. Photoshop英汉对照表
  10. java微信服务通知
  11. python空气质量等级判断_空气质量等级的判定
  12. Java美颜相机(1)图像处理
  13. 《UnityAPI.Vector3三维向量》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Vector3+Lerp+Cross+Dot+Slerp+立钻哥哥++OK++)
  14. 二元一次方程有唯一解的条件_线性方程组在什么时候有唯一解/无穷个解/无解?...
  15. python爬网易云音乐评论最多的歌_使用Python爬一爬网易云音乐上那些评论火爆的歌曲...
  16. Unity3d绑定键盘弹出UI
  17. QQ个人文件夹保存位置无效
  18. 微软亚洲研究院面试题
  19. 目标检测中的NMS,soft NMS,softer NMS,Weighted Boxes Fusion
  20. python默认安装目录在哪_怎么查看python的安装目录

热门文章

  1. node.js中获取请求当前页的前一页URL地址
  2. 百度地图根据经纬度获取地址
  3. 超级简单的Region对比识别验证码
  4. 课程设计:混合数据排序
  5. 第二十单元 计划任务crond服务
  6. postgresql数据库导入导出
  7. linux mysql更改用户权限
  8. 一天一点数据结构+算法:复习堆的知识
  9. shell 实现txt转换成html
  10. javascript监测form是否提交