对象克隆是创建一个对象的精确副本的方式。对象类的clone()方法被用于克隆对象。
该java.lang.Cloneable接口必须由我们要建立其对象克隆的类实现。如果我们不实现Cloneable接口,clone()方法生成CloneNotSupportedException异常。
克隆()方法在所述对象类中定义。克隆()方法的语法如下:
protected Object clone() throws CloneNotSupportedException
为什么要使用clone()方法?
该clone()方法节省了用于创建对象的精确副本额外的处理任务。如果我们使用new关键字执行它,它会主动进行大量的处理时间,这就是为什么我们使用对象的克隆。
对象克隆的优势
虽然Object.clone()有一些设计问题,但它仍然是复制对象的一种流行和简便的方法。以下是使用clone()方法的优点列表:
- 你不需要写冗长和重复的代码。只需使用一个抽象类与4-或5-线长clone()方法。
- 这是复制对象的最简单,最有效的方法,尤其是当我们把它应用到一个已经开发或旧的项目。只要定义一个父类,它实现Cloneable,提供clone()方法的定义和任务将完成。
- 克隆()是复制数组的最快方法。
以下是)克隆的一些缺点(方法的列表:
- 要使用Object.clone()方法,我们要了很多语法的改变我们的代码,就像实现Cloneable接口,定义clone()方法和处理CloneNotSupportedException异常,最后,调用Object.clone()等。
- 我们必须实现可复制的接口,而它并没有在它的任何方法。我们只是用它来告诉JVM,我们可以执行的clone()我们的对象。
- Object.clone()是受保护的,所以我们要为我们自己的clone()和间接从中调用Object.clone()。
- Object.clone()不调用任何构造函数,所以我们并没有对对象的构造任何控制。
- 如果你想要写一个子类,然后所有其超应该定义或从其它父类继承它在其中的clone()方法的克隆方法。否则,super.clone()来链将失败。
- Object.clone()只支持浅拷贝,但是我们需要重写,如果我们需要深克隆。
让我们来看看对象克隆的简单例子
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,"amit");
Student18 s2=(Student18)s1.clone();
System.out.println(s1.rollno+" "+s1.name);
System.out.println(s2.rollno+" "+s2.name);
}catch(CloneNotSupportedException c){}}
}
Output:101 amit
101 amit
正如你可以在上面的例子中看到的,引用变量的值相同。因此,克隆()拷贝一个目的是另一个的值。所以我们并不需要编写显式代码到一个对象的值复制到另一个。
【Java克隆对象】如果我们通过创建新的关键字另一个对象,并指定另一个对象的值这一项,这将需要很多这样的对象上处理的。因此,为了节省额外的处理任务,我们使用clone()方法。