`

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.lang包介绍

    Java编程语言的基础构建块之一是`java.lang`包,它被自动导入到每个Java程序中,无需...总之,`java.lang`包是Java编程的核心,提供了基础的类型、对象操作、异常处理、线程支持等关键功能,是理解和使用Java的基础。

    JAVA常用API文档 中文完整版.zip

    Cloneable接口表示一个对象可以被克隆;Serializable接口则用于对象的序列化和反序列化。 2. **集合框架**:包括List、Set、Map等接口以及ArrayList、LinkedList、HashSet、HashMap等实现类。它们提供了数据存储和...

    《剑指offer》Java创建对象的五种方式.pdf

    如果一个类实现了`Cloneable`接口并且重写了`clone()`方法,可以通过`clone()`来创建对象的副本。例如: ```java User user = new User(); User clonedUser = (User) user.clone(); ``` 克隆可以创建与原对象...

    java_lang包详解.pdf

    Cloneable接口表示对象可以被克隆,Comparable接口则允许类的对象进行比较排序。 java.lang包还包含了一些与安全、线程和内存管理相关的类,如SecurityManager用于安全管理,Thread和ThreadGroup是线程相关的类,...

    Java API接口详述.rar

    2. `java.lang.Cloneable`: 标记接口,表示对象可以被克隆。 3. `java.lang.Runnable`: 实现此接口的类可以作为线程执行的任务。 4. `java.util.List`, `Set` 和 `Map`: 这些接口定义了集合框架的核心接口,提供数据...

    Java中clone方法共6页.pdf.zip

    例如,可以使用序列化和反序列化,或者使用`CopyConstructor`(一个带原有对象作为参数的构造器)来实现对象的复制。 7. **注意事项**: - 如果对象中包含不可克隆的字段(如`final`字段),`clone()`方法可能无法...

    java-java-lang包.pdf

    Java编程语言中的java.lang包是一个核心包,它提供了Java语言运行时的基础类库,包含了Java程序运行的基本数据类型、异常处理类以及一些用于系统级别的工具类和接口。java.lang包中的类和接口不需要程序员显示地导入...

    java.lang研究

    `Cloneable`接口标记类实例可以被克隆,`Comparable`接口则定义了对象之间的比较逻辑。 在Java 2中,一些新类和方法被添加到`java.lang`包,如`ThreadLocal`、`RuntimePermission`等,以增强安全性、多线程支持和...

    java对象复制[参考].pdf

    Java的`clone()`方法是实现对象复制的一种方式,它存在于`java.lang.Object`类中,是一个本地(native)方法,效率较高。要使用`clone()`方法,首先需要确保你的类实现了`Cloneable`接口。这个接口并不包含任何方法...

    java-lang包详解

    在Java编程语言中,`java.lang`包是所有Java程序的基础,因为它包含了许多核心类和接口,这些类和接口是编写任何Java应用程序所必需的。由于这个包是自动导入的,因此程序员无需在代码中显式地导入`java.lang`。 1....

    JAVA中常用类的常用方法.docx

    要进行“克隆”的对象所属的类必须实现 java.lang.Cloneable 接口。 2. equals(Object obj) 方法:比较引用类型数据的等价性。等价标准:引用类型比较引用,基本类型比较值。存在特例:对 File、String、Date 及...

    Java设计模式之原型模式.docx

    浅克隆可以通过实现`java.lang.Cloneable`接口并重写`clone()`方法来实现。 深克隆(Deep Clone): 深克隆则不仅创建对象的副本,还对引用类型的属性进行逐个克隆,确保每个克隆对象拥有独立的引用。这意味着即使...

    MyBatisDemo && JAVA把一个对象的全部属性复制到另一个相同的对象

    2. **克隆(Clone)**:通过重写`Object`类的`clone()`方法可以实现对象的拷贝。但是,这要求被拷贝的对象必须实现`Cloneable`接口,并且通常需要递归调用子对象的`clone()`方法,以确保所有引用的对象也被拷贝。 3...

    java设计模式代码实现

    Java中的`java.lang.Cloneable`接口支持对象克隆。 6. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本不兼容的类可以一起工作。 7. **装饰器模式**:动态地给一个对象添加一些额外的...

    java-6个机制.doc

    - **实现`Cloneable`接口**:被克隆的类必须实现`Cloneable`接口,表明该类支持克隆操作。 - **重写`clone()`方法**:实现`Cloneable`接口的类需要覆盖`Object.clone()`方法,并将其访问级别调整为公共(public)...

    设计模式java 版本

    Java提供了`java.lang.Cloneable`接口来实现对象的克隆。 5. **适配器模式**:将一个类的接口转换成客户希望的另一个接口。适配器使原本不兼容的类可以一起工作。在Java中,这通常通过继承或组合来实现。 6. **...

    设计模式课程设计---使用5个以上不同的设计模式完成(java)

    在Java中,我们可以使用`java.lang.Cloneable`接口和`Object.clone()`方法来实现对象的浅复制,或者利用序列化和反序列化实现深复制。这种模式在需要频繁创建相似对象的场景下非常有效,节省了时间和内存。 2. **...

Global site tag (gtag.js) - Google Analytics