1.Cloneable接口

Cloneable接口是标记型接口,它是内部没有方法和属性,实现Cloneable 接口来表示该类可以被克隆,才可以调用Object.clone() 方法对该类的实例进行按字段复制。如果在没有实现Cloneable 接口的实例上调用Object.clone() 方法,则会抛出CloneNotSupportedException(克隆不被支持)的异常。

2.克隆的分类

克隆分为深克隆和浅克隆。

浅克隆(shallow clone):浅克隆是指拷贝对象时仅仅copy对象本身和对象中的基本变量,而不拷贝对象包含的引用指向的对象。

深克隆(deep clone):不仅仅copy对象本身,而且copy对象包含的引用指向的所有对象。

浅克隆:只需要调用Object中的clone() 方法。

public class Equalis implements Cloneable{public String name;public int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Equalis [name=" + name + ", age=" + age + "]";}protected Objec clone() throws CloneNotSupportedException {return (Equalis) super.clone();}}

测试

public class EqualsTest {public static void main(String[] args) throws CloneNotSupportedException {Equalis e  = new Equalis();e.setName("张三");e.setAge(10);System.out.println(e.hashCode());Equalis e1 = e.clone();System.out.println(e1.hashCode());}}

运行结果:118352462
                  1550089733

两者的hashcode值不同,说明clone() 方法并不是直接把e的引用直接赋给e1 ,而是在堆中重新开辟了一块空间,将e 复制过去,把新的地址返回给了e1。

深克隆:如果要进行深克隆则要进行重写Object 中的clone() 方法。

public Object clone() throws CloneNotSupportedException {  Test          test = new Test(this.test.userData);    double      data1 = this.data1;  String        data2 = new String(this.data2);  StringBuffer data3 = new StringBuffer(this.data3.toString());  CloneableClass copy = new CloneableClass(test, data1, data2, data3);  return copy;
}

Cloneable接口的作用相关推荐

  1. Cloneable接口的作用与深入理解深度克隆与浅度克隆

    cloneable接口的作用 cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则 ...

  2. Java中的Cloneable接口

    1.Cloneable接口的作用 Cloneable是标记接口(其方法体为空),它用来表示一个类拥有某些希望具有的特征.实现Cloneable接口的类被标记为可克隆的,而且其对象可以使用Object类 ...

  3. java cloneable 接口_Cloneable 接口 记号接口(标记接口)

    Cloneable 接口指示了一个类提供了一个安全的clone方法. 首先了解Object.clone()方法: clone是Object超类的一个protected方法,用户代码不能直接调用这个方法 ...

  4. 重要接口—Cloneable接口

    作用:允许实现了Cloneable接口的类的对象进行克隆操作.允许克隆的意思是可以调用clone()方法,至于是深拷贝还是浅拷贝,取决于如何重写Object的clone()方法.查看Cloneable ...

  5. java cloneable 用途_java中的clon()和cloneable接口浅析(转)

    今天看了一上午关于clone()和cloneable interface 的文章,我推荐一篇供大家参考学习. 蓝色为我的翻译,有不当之处,大家多多包涵! clone() and the Cloneab ...

  6. Cloneable接口和循环冗余校验算法

    1 Cloneable 接口 实现该接口的类可以调用clone()方法合法地对该类实例进行按字段复制.按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的) 2 循环冗 ...

  7. 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)

    在Java中除了new关键字可以创建对象(实例化对象)以外,使用Cloneable接口也可以实现对象的创建,具体用法如下: Cloneable接口比较特殊,虽然他是一个口接口,但是我们也必须重写clo ...

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

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

  9. 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?

    一般来说,台式机显示器是不会有USB接口的,只有主机上面才有.但其实也有例外,而这些例外的显示器USB接口是做什么用的呢?有用户表示显示器的USB接口用不了,插上U盘也没有反应.接下来小编就为大家介绍 ...

最新文章

  1. uva1507(状态压缩+dfs)
  2. java递归实现 堆的删除_java 递归实现删除或查询指定目录下的全部文件
  3. 产生数(floyd+高精度计算)
  4. python模块(4)-Collections
  5. Angular2学习笔记——在子组件中拿到路由参数
  6. Spring Boot使用layui的字体图标时无法正常显示 解决办法
  7. git 应用 branch指针和HEAD指针
  8. mysql数据比较工具_mysql主从数据对比工具简介
  9. 如何搭建一对一直播PHP直播系统源码的流程
  10. 微信小程序实例教程(三)
  11. CSS 中的层叠,层级关系
  12. 怎样登陆微信小程序?怎样登陆微信小程序后台?微信小程序成员如何登陆后台管理?微信小程序怎么登录,如何正确登录微信小程序后台?微信小程序如何登录页面?具体操作步骤如下
  13. 内网ip和外网ip区别
  14. 30个很棒的Photoshop技巧和窍门可帮助您提高计算机图形技能
  15. 如何免费的把 PDF 转换为 Word文档?
  16. 【背包问题】大容量背包问题(超大背包)
  17. 牛客国庆集训派对Day1 New Game!+计算几何
  18. 《Hive编程指南》阅读笔记
  19. 将VS编译器默认为X64
  20. 求彩路cadwalk服装设计软件,谁能发一下

热门文章

  1. UnblockNeteaseMusic使用教程
  2. Android 获取系统版本号,设备品牌等
  3. 【JavaScript】基础教程
  4. 配置apache服务器,使其能够使用php解析.phtml、.php3类型的文件
  5. cognos安装启动遇到的问题详解二
  6. 职场知识:这 3 份程序员年终总结呈上,来年上级一定看重你!
  7. 浏览器开发基础培训汇总
  8. 华山全敏还是全劲_楚留香手游华山加点推荐
  9. 位图文件(.bmp文件)结构
  10. 超声波的四个特性_四大特性让超声波成为液位测量的常见液位计