java公用方法:clone方法详解

1. clone介绍

Java的所有类都默认继承java.lang.Object类,在java.lang.Object类中有一个方法clone()。JDK API的说明文档解释这个方法将返回Object对象的一个拷贝,拷贝对象返回的是一个新对象,而不是一个引用。 

2. clone方法的实现

(1)实现Cloneable接口

要实现clone方法必须实现Cloneable接口,否则会报CloneNotSupportedException异常。

但查看Cloneable接口的源码,没有定义任何一个方法。其实Cloneable接口相当于一个标示,该类可以调用clone方法。(设计原理及设计细节稍后补充

(2)重写clone()方法

clone方法是在Object种定义的,而且是protected型的,为了让其它类能调用这个clone 类的clone()方法,重载之后要把clone()方法的属性设置为public。 

Object中默认的实现是一个浅拷贝,也就是表面拷贝,只拷贝了对象本身,如果含有对象成员,则只复制了一份对象成员的引用,导致克隆后的对象与原对象指向同一个数据成员。若想解决此问题,需要实现深层次拷贝,调用成员对象的克隆方法。

public class A implements Cloneable {
    public String name[];
    
    public A(){
        name=new String[2];
    }

    public Object clone() {
        A o = null;
        try {
            o = (A) super.clone();  
                        o.name=(String[])name.clone();//进行成员对象克隆
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return o;
    }
}

 (3)String对象在clone方法中的特殊性

String对象不需要执行自身的克隆方法,这与String对象的存储形式有关。(具体参考:java基础类型:String

 

原文地址:https://www.cnblogs.com/xiaotian15/p/3665316.html