Cloneable

Object java.lang.Object.clone() throws CloneNotSupportedException

创建并返回这个对象的拷贝。

虽然clone()方法是Object类的方法,但自己的类必须实现java.lang.Cloneable接口,否则会报错java.lang.CloneNotSupportedException。

效果为创建一个新对象,然后逐字段地拷贝,由jvm实现。对于引用类型,jvm只帮你浅拷贝,需要深拷贝的话还得自己实现。

在重写equals()方法后,效果为 x.clone() != x成立,x.clone().equals(x)成立。

需要说明的是,java.lang.Cloneable接口内没有任何方法。

例子:

时间: 2024-10-20 15:06:03

Cloneable的相关文章

创建对象的第二种方式:克隆clone,要实现Cloneable接口

1 ackage com.wisezone.clone; 2 3 /** 4 * 空接口: 5 * 标识,告诉JVM,通行 6 * 1.克隆 7 * 2.序列化 8 * 9 * 创建对象的第二种方式:克隆clone,要实现Cloneable 10 * @author 王东海 11 * @2017年4月15日 12 */ 13 public class TestClone implements Cloneable 14 { 15 public String name; 16 17 public s

浅谈Cloneable的实现

    今天看到原型法模式,就顺便先学了下Java的Cloneable接口,这个东西是个标记接口,里面什么都没有.我又找了Object中的clone方法,这个方法被声明为propected类型,但是在B类中new了一个A类的对象a,a却不能调用a.clone()方法.而在B类的对象b却可以调用clone方法b.clone();一开始没明白是怎么回事,后来一想A,B的父类虽然都是Object,但是毕竟是不同的父亲,ObjectA和A又不在一个包里面,而且它是A的父类,那么当然只能在ObjectA的

java Cloneable文档翻译及实例完全解析

title: java.lang.Cloneable解析 date: 2014-12-05 14:26:01 tags: java java.lang Interface Cloneable All Known Subinterfaces: 所有已知的子接口 AclEntry, Attribute, AttributedCharacterIterator, Attributes, CertPathBuilderResult,CertPathParameters, CertPathValidato

Java的一个高性能快速深拷贝方法。Cloneable?

本人在设计数据库缓存层的时候,需要对数据进行深拷贝,这样用户操作的数据对象就是不共享的. 这个思路实际上和Erlang类似,就是用数据不共享解决并发问题. 1. 序列化? 原来的做法,是用序列化,我用了Json的序列化,lib-json.一个再传统不过的方法.把数据字段序列化成json保存.取出来的时候进行反序列化. 测试100条数据,100次循环,竟然TM的用了15秒. 这个是个啥概念?简直惨不忍睹. 于是网上搜,找到个Jackson,号称性能XXX的,比Google的gson高XXX. 替换

Cloneable接口和Object的clone()方法

http://www.cnblogs.com/xrq730/p/4858937.html 为什么要克隆 为什么要使用克隆,这其实反映的是一个很现实的问题,假如我们有一个对象: public class SimpleObject implements Cloneable { private String str; public SimpleObject() { System.out.println("Enter SimpleObject.constructor()"); } public

Class doesn't implement Cloneable之怪象

1. 报错: 11-20 14:06:10.89: W/dalvikvm(10190): threadid=15: thread exiting with uncaught exception (group=0x4001d400) 11-20 14:06:10.360: E/AndroidRuntime(10190): FATAL EXCEPTION: GLThread 10 11-20 14:06:10: E/AndroidRuntime(10190): java.lang.CloneNotS

关于对象的克隆Cloneable

突然看到了对象克隆这个东西, 又看了看它是Object类中的 native 方法, 感觉能提高程序的运行效率. 就来研究研究这个东西. part I.简单说一下对象的克隆 平时我们使用对象的时候, 只要拿到这个对象的引用, 引用者就可以随便修改对象中的属性(首先对象有对外的getter&setter方法), 有时候, 我们想让调用者获得该对象的拷贝(也就是一个内容完全相同的对象,但是在内存中存在两个这样的对象)? 有什么方法能解决这个呢? 1. 重新 new 一个对象, 然后给对象的每个属性重新

使用clone( )和Cloneable接口

由Object类定义的绝大部分方法在本书其他部分讨论.而一个特别值得关注的方法是clone( ).clone( )方法创建调用它的对象的一个复制副本.只有那些实现Cloneable接口的类能被复制. Cloneable接口没有定义成员.它通常用于指明被创建的一个允许对对象进行位复制(也就是对象副本)的类.如果试图用一个不支持Cloneable接口的类调用clone( )方法,将引发一个CloneNotSupportedExcepti on异常.当一个副本被创建时,并没有调用被复制对象的构造函数.

Cloneable 接口是不是一个鸡肋?

Josh Bloch:如果你在我的书中读到关于克隆的文章,特别是当你在字里行间读到的时候,你就会知道我认为克隆已经被深深地破坏了.有一些设计缺陷,其中最大的一个是可克隆的接口没有克隆方法.这就意味着它根本就不起作用:制造一些可克隆的东西并不能说明你能用它做什么.相反,它说明了它在内部可以做些什么.它说,如果通过调用super.重复克隆结束调用对象的克隆方法,该方法将返回原始的字段副本.但它并没有说明你能用一个实现可克隆界面的对象做什么,这意味着你不能做多态克隆操作.如果我有一个Cloneable

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

1 Cloneable 接口 实现该接口的类可以调用clone()方法合法地对该类实例进行按字段复制.按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的) 2 循环冗余校验算法 循环冗余校验(英语:Cyclic redundancy check,通称“CRC”)是一种根据网络数据数据包或计算机文件等数据产生简短固定位数校验码的一种散列函數,主要用来检测或校验数据传输或者保存后可能出现的错误.生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检