`

JAVA基础 对象克隆 实现java.lang.Cloneable接口

    博客分类:
  • JAVA
阅读更多

先来看看JDK的解释:

 

java.lang.Cloneable
A class implements the Cloneable interface to indicate to the java.lang.Object.clone() method that it is legal for that method to make a field-for-field copy of instances of that class. 

Invoking Object's clone method on an instance that does not implement the Cloneable interface results in the exception CloneNotSupportedException being thrown. 

By convention, classes that implement this interface should override Object.clone (which is protected) with a public method. See java.lang.Object.clone() for details on overriding this method. 

Note that this interface does not contain the clone method. Therefore, it is not possible to clone an object merely by virtue of the fact that it implements this interface. Even if the clone method is invoked reflectively, there is no guarantee that it will succeed.

Since:
JDK1.0
Version:
1.17, 11/17/05
Author:
unascribed
See Also:
java.lang.CloneNotSupportedException
java.lang.Object.clone()

 

意思就是:

此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。 

如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。 

按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。请参阅 Object.clone(),以获得有关重写此方法的详细信息。 

注意,此接口不 包含 clone 方法。因此,因为某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。 

 

    我们平时需要对某个对象进行操作,但是这个对象被两个地方操作,却都要使用最原始时候的对象。这个时候就需要Cloneable接口出现了。并且如果我们对象里面的属性还有非基本类型对象的话也需要实现此接口直到没有属性是非基本类型对象为止(深拷贝)

 

这里有个不错的例子:http://cqitcs02370236.cnblogs.com/archive/2006/04/23/382644.html

 

 

 

2
2
分享到:
评论

相关推荐

    java克隆对象(两种方法)

    java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)

    java编程常见问题

    当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。 47.java.lang.EnumConstantNotPresentException 枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象...

    Java程序设计复习题.docx.docx

    java, lang B. java, util C. java, applet D. java, rmi 下列关于Java对import语句规定的叙述中,错误的是 C 。 在Java程序中import语句可以有多个 在Java程序中import语句可以没有 在Java程序中import语句必须有...

    详解Java中的克隆技术

    有关Java中的克隆技术的详细讲述,其中讲解了“浅复制”和“深复制”的用法和区别,继承了Java中的封装类Cloneable

    Java2游戏编程.pdf

    4.1.7 java.lang.Cloneable 4.1.8 java.lang.Thread 4.2 java.io包 4.3 java.util包 4.3.1 java.util.StringTokenizer 4.3.2 java.util.Random 4.3.3 Java2集合框架 4.4 总结 4.5 练习 第2篇 Java 2-D图像开发和抽象...

    spring4.0 API

    java.util.HashMap,V> (implements java.lang.Cloneable, java.util.Map,V>, java.io.Serializable) java.util.LinkedHashMap,V> (implements java.util.Map,V>) org.springframework.core.annotation....

    NC总帐API帮助文档

    java.io.Serializable, java.lang.Cloneable, java.util.EventListener, nc.vo.gl.vouchervaluechange.ValueChangeListener, nc.vo.glpub.IVoAccess -----------------------------------------------------------...

    Java高级程序设计测试含答案.docx

    非流类(正确答案) java中用于创建文件对象的类是() [单选题] * A.File(正确答案) B.Object C.Thread D.Frame 若要将一个类对象能被整体写入文件,则定义该类时必须实现下列哪个接口() [单选题] * A....

    【java系列文章】java 基础知识

    2.Java为什么不直接实现lterator接口,而是实现lterable? 3.简述什么是值传递和引用传递? 4.概括的解释下Java线程的几种可用状态? 中级 1.简述Java同步方法和同步代码块的区别 ? 2.HashMap和Hashtable有什么区别? 3....

    Java集合面试题.docx

    Java 集合框架的基础接口有哪些? 4. 为何 Collection 不从 Cloneable 和 Serializable 接口继承? 5. 为何 Map 接口不继承 Collection 接口? 6. Iterator 是什么? 7. Enumeration 和 Iterator 接口的区别? ...

    java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】

    * 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 CloneNotSupportedException) * 注意: * 1.被克隆对象.clone()出的对象,是被克隆对象的当前状态 * 2.被克隆对象 如果...

    bigcoder84#study-notes#_4Object中的clone方法1

    Object类中的clone方法clone()方法的作用克隆方法用于创建对象的拷贝,为了使用clone方法,类必须实现java.lang.Cloneable接口

    java编程基础,应用与实例

    9.4 Cloneable 接口 143 9.5 Enumeration接口 144 9.6 巩固练习 145 第10章 内隐类(inner class) 146 10.1 静态类(static class) 146 10.2 成员类(member class) 147 10.3 局部类(local class) 150 ...

    day16-Map、可变参数、Cloneable.pdf

    day16-Map、可变参数、Cloneable.pdf

    JAVA高级程序设计测试题含答案.docx

    JAVA高级程序设计测试题含答案 JAVA高级...第14题 【单选题】【2.00分】【概念理解】 哪个方法是实现Runnable接口必须实现的 [单选题] * JAVA高级程序设计测试题含答案全文共43页,当前为第4页。 A. wait() B. run()

    Test8.java

    该资源为Java源代码,设计了一个名为Complex的复数类,实现了复数运算的加减乘除和绝对值,覆盖了toString方法,实现了Cloneable接口。包含一个测试程序,提示用户输入两个复数,然后显示它们加减乘除之后的结果。

    java se和java ee基础功能点开发测试包

    该包围绕java se结合java ee的基础应用对目前最基础最常见的应用分别给以做了相关demo 具体包括有设计模式demo(设配模式、装饰模式、享元模式)、线程池设计方案、集合类容器demo、io流、Cloneable接口、自定义标签...

    java初学者必看

    最近正在学习Java,也买了很多的有关Java方面的书籍,其中发现《跟我学Java》这本书,都的很不错啊,所以顺便拿电脑把这本书的目录敲了下来,与大家分享。尤其是那些和我一样初学Java的朋友们,看看哪一节对你有用,...

    Cloneable:使用C#Source Generator自动生成克隆方法

    可克隆使用C#Source Generator自动生成克隆方法有时您想克隆一个对象。 您可以实现 clone 方法,但是当开发人员添加新的 Field 或 Property ... Cloneable.Sample 项目中提供了一个示例。 源生成器是在 dotnet 5.0 中

Global site tag (gtag.js) - Google Analytics