cloneable(使用java中的cloneable接口实现对象克隆)

2024-07-17T12:43:04

使用java中的cloneable接口实现对象克隆

原理:在Java中,对象的克隆(Clone)是指利用已有对象的数据(属性),生成新的具有相同属性(数据)的对象。

一、为什么需要克隆

在实际开发中,对象克隆常常用于以下场景:

  • 1.使用原有对象的数据初始化新的对象
  • 2.创建备份,以便对象数据恢复
  • 3.远程方法调用(RMI)

二、克隆方法

实现对象克隆有两种方法,一种是实现Cloneable接口,另一种是使用序列化方法实现克隆。

1.实现Cloneable接口

Cloneable接口并不包含任何方法,标志着可以克隆。仅仅在实现了Cloneable接口的类里,调用Object中的clone方法将会克隆一个新的对象。要实现Cloneable接口有以下几点要注意:

  • 1.实现Cloneable接口,即:classPeopleimplementsCloneable{}
  • 2.在被克隆的类中,重写Object类中的clone()方法,即:publicObjectclone()throwsCloneNotSupportedException{}
  • 3.调用被克隆的类的clone()方法即可实现克隆,如:Peoplepeople1=newPeople();Peoplepeople2=(People)people1.clone();

2.使用序列化方法实现克隆

序列化是指将一个对象编程流的形式,便于在网络上传输或者存储到本地磁盘等。反序列化是指将这个流转换为对象。把对象转换成字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。一个类只要实现了Serializable接口,这个类的对象就可以被序列化和反序列化。

利用序列化实现对象的克隆要注意以下几点:

  • 1.实现Serializable接口,即:classPeopleimplementsSerializable{}
  • 2.使用ByteArrayOutputStream和ObjectOutputStream将对象转化为Byte数组
  • 3.使用ByteArrayInputStream和ObjectInputStream将Byte数组转化为对象的克隆

三、实现对象克隆的代码示例

下面是通过实现Cloneable接口实现对象克隆的代码示例:

```java classPeopleimplementsCloneable{ privateStringname; publicObjectclone()throwsCloneNotSupportedException{ returnsuper.clone(); } } Peoplepeople1=newPeople(); Peoplepeople2=(People)people1.clone(); ```

下面是通过序列化实现对象克隆的代码示例:

```java classPeopleimplementsSerializable{} Peoplepeople1=newPeople(); ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream(); ObjectOutputStreamobjectOutputStream=newObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(people1); ByteArrayInputStreambyteArrayInputStream=newByteArrayInputStream(byteArrayOutputStream.toByteArray()); ObjectInputStreamobjectInputStream=newObjectInputStream(byteArrayInputStream); Peoplepeople2=(People)objectInputStream.readObject(); ```