Java对象克隆
1 什么是Java对象克隆
对象克隆是创建一个对象的副本的方式。Object类的clone() 方法用于克隆对象。
java.lang.Cloneable接口必须由我们要建立其对象克隆的类实现。如果我们不实现Cloneable接口,则clone() 方法将抛出CloneNotSupportedException异常。
clone() 方法的语法如下:
protected Object clone() throws CloneNotSupportedException
2 对象克隆的优势
clone() 方法节省了用于创建对象的副本时间。如果使用new关键字执行此操作,则将花费大量处理时间,这就是我们使用对象克隆的原因。
尽管Object.clone() 方法存在一些设计问题,但它仍然是复制对象的一种流行且简便的方法。下面列出了使用clone()方法的优点:
您无需编写冗长和重复的代码。只需将抽象类与clone() 方法一起使用。
这是复制对象的最简单,最有效的方法,尤其是当我们将其应用于旧项目时。只需定义一个父类,在其中实现Cloneable接口,提供clone() 方法的实现即可完成任务。
Clone() 是复制数组的最快方法。
3 对象克隆的劣势
下面列出了clone() 方法的一些缺点:
要使用Object.clone() 方法,我们必须更改代码的语法,例如实现Cloneable接口,定义clone() 方法和处理CloneNotSupportedException异常,最后调用Object.clone()等。
当它没有任何方法时,我们必须实现Cloneable的接口。我们只需要使用它来告诉JVM我们可以对对象执行clone() 。
Object.clone()方法是protected的,因此我们必须提供自己的clone()并调用Object.clone()。
Object.clone() 不会调用任何构造函数,因此我们无法控制对象的构造。
如果要在子类中编写一个clone方法,则其所有父类都应该定义clone()方法或从另一个父类继承该方法。否则,super.clone()方法将失败。
Object.clone() 仅支持浅复制,但如果需要深度克隆,则需要覆盖它。
4 clone()方法的例子
让我们看一下对象克隆的简单示例
package com.yiidian;
/**
* 一点教程网: http://www.yiidian.com
*/
class Student18 implements Cloneable{
int rollno;
String name;
Student18(int rollno,String name){
this.rollno=rollno;
this.name=name;
}
public Object clone()throws CloneNotSupportedException{
return super.clone();
}
public static void main(String args[]){
try{
Student18 s1=new Student18(101,"张三");
Student18 s2=(Student18)s1.clone();
System.out.println(s1.rollno+" "+s1.name);
System.out.println(s2.rollno+" "+s2.name);
}catch(CloneNotSupportedException c){
}
}
}
输出结果为:
101 张三
101 张三