java.lang.Object 之 clone() 使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.Object 之 clone() 使用相关的知识,希望对你有一定的参考价值。

Java的所有类都默认继承 java.lang.Object 类,在 java.lang.Object 类中有一个方法 clone()。JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象返回的是一个新对象,而不是一个引用。二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。
对于Java中使用 clone() 方法有几点需要注意

  1:被clone的类必须实现 Cloneable 接口,Cloneable 接口实际上是个标识接口,没有任何接口方法,如果不实现 Cloneable 接口会报 java.lang.CloneNotSupportedException。

  2:实现 Cloneable 接口的类应该使用公共方法重写 Object.clone()(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone() 方法是反射性调用的,也无法保证它将获得成功。

  3:写 clone() 方法时,通常都有一行代码 super.clone(); clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员

public class Clone implements Cloneable {

    @Override
    public Clone clone() {

        try {
            Clone clone = (Clone) super.clone();
            return clone;
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e);
        }
    }
}

 

以上是关于java.lang.Object 之 clone() 使用的主要内容,如果未能解决你的问题,请参考以下文章

关于clone(java.lang.Object)重写

为啥 java.lang.Cloneable 不覆盖 java.lang.Object 中的 clone() 方法?

从 java.lang.Object 访问 clone()

如何修复类 java.lang.Object 的现有方法“clone”和“finalize”的 proguard 警告“找不到引用的方法”

JAVA之Object类

采用Clone()方式创建对象