Cloneable接口的作用
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接口的作用相关推荐
- Cloneable接口的作用与深入理解深度克隆与浅度克隆
cloneable接口的作用 cloneable其实就是一个标记接口,只有实现这个接口后,然后在类中重写Object中的clone方法,然后通过类调用clone方法才能克隆成功,如果不实现这个接口,则 ...
- Java中的Cloneable接口
1.Cloneable接口的作用 Cloneable是标记接口(其方法体为空),它用来表示一个类拥有某些希望具有的特征.实现Cloneable接口的类被标记为可克隆的,而且其对象可以使用Object类 ...
- java cloneable 接口_Cloneable 接口 记号接口(标记接口)
Cloneable 接口指示了一个类提供了一个安全的clone方法. 首先了解Object.clone()方法: clone是Object超类的一个protected方法,用户代码不能直接调用这个方法 ...
- 重要接口—Cloneable接口
作用:允许实现了Cloneable接口的类的对象进行克隆操作.允许克隆的意思是可以调用clone()方法,至于是深拷贝还是浅拷贝,取决于如何重写Object的clone()方法.查看Cloneable ...
- java cloneable 用途_java中的clon()和cloneable接口浅析(转)
今天看了一上午关于clone()和cloneable interface 的文章,我推荐一篇供大家参考学习. 蓝色为我的翻译,有不当之处,大家多多包涵! clone() and the Cloneab ...
- Cloneable接口和循环冗余校验算法
1 Cloneable 接口 实现该接口的类可以调用clone()方法合法地对该类实例进行按字段复制.按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的) 2 循环冗 ...
- 【Java】Cloneable 接口讲解 (包含浅拷贝与深拷贝不一样的实现讲解)
在Java中除了new关键字可以创建对象(实例化对象)以外,使用Cloneable接口也可以实现对象的创建,具体用法如下: Cloneable接口比较特殊,虽然他是一个口接口,但是我们也必须重写clo ...
- clone是深拷贝还是浅拷贝_Cloneable接口的作用与探索理解浅拷贝与深拷贝
导读:本文将主要讨论设计模式--原型模式中,关于cloneable接口及浅拷贝与深拷贝的概念. 原型模式的理解 关于原型模式的理解,我在网上发现一个有趣且助于理解原型模式的例子在这里分享一下:火影忍者 ...
- 连接没反应_显示器USB接口的作用是什么?为什么会没有反应?
一般来说,台式机显示器是不会有USB接口的,只有主机上面才有.但其实也有例外,而这些例外的显示器USB接口是做什么用的呢?有用户表示显示器的USB接口用不了,插上U盘也没有反应.接下来小编就为大家介绍 ...
最新文章
- uva1507(状态压缩+dfs)
- java递归实现 堆的删除_java 递归实现删除或查询指定目录下的全部文件
- 产生数(floyd+高精度计算)
- python模块(4)-Collections
- Angular2学习笔记——在子组件中拿到路由参数
- Spring Boot使用layui的字体图标时无法正常显示 解决办法
- git 应用 branch指针和HEAD指针
- mysql数据比较工具_mysql主从数据对比工具简介
- 如何搭建一对一直播PHP直播系统源码的流程
- 微信小程序实例教程(三)
- CSS 中的层叠,层级关系
- 怎样登陆微信小程序?怎样登陆微信小程序后台?微信小程序成员如何登陆后台管理?微信小程序怎么登录,如何正确登录微信小程序后台?微信小程序如何登录页面?具体操作步骤如下
- 内网ip和外网ip区别
- 30个很棒的Photoshop技巧和窍门可帮助您提高计算机图形技能
- 如何免费的把 PDF 转换为 Word文档?
- 【背包问题】大容量背包问题(超大背包)
- 牛客国庆集训派对Day1 New Game!+计算几何
- 《Hive编程指南》阅读笔记
- 将VS编译器默认为X64
- 求彩路cadwalk服装设计软件,谁能发一下