Clone函数和Cloneable接口简要说明

一、clone()函数

      clone 函数定义在Object类里面,是一个native函数,提供对当前对象的复制。复制过程不涉及对象构造函数的调用,但是会复制一份当前对象数据。

1、如果不重写当前对象的clone函数,当调用当前对象的clone函数时,会重新生成一块内存保存当前对象的数据copy,对象内基础数据类型会拷贝一份,如果是引用型数据,就会使用当前属性的引用,也就是说新的copy对象的该属性和旧的对象的该属性指向同一个对象。这样就比较危险,当不小心修改了该引用对象中的属性,会引发不可预知的错误,最常见的是NullPointerException异常。

2、覆盖clone方法

如果覆盖了clone方法,做到深度复制当前对象,可以在clone方法中先调用super.clone()获取到当前对象,然后在对当前对象的属性进行clone调用,例如:


属性深度复制

如果对象层次复杂,要保证每个clone()函数的调用,都尽量保证返回新的对象,不要返回引用的copy。

二、Cloneable接口

该接口是一个标记接口,有clone需求的类都要实现该接口,要不会报CloneNotSupportedException错误。


cloneable接口

三、替代

实际代码构建中应该尽量少使用clone函数,可以使用构造函数替代,深度复制当前对象。

例如:


peron



Asian

这样的构建的话,改变Asian中person的值,就不会影响原先的person数据。

你可能感兴趣的:(Clone函数和Cloneable接口简要说明)