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 张三

 

热门文章

优秀文章