美文网首页
Clone函数和Cloneable接口简要说明

Clone函数和Cloneable接口简要说明

作者: 程序猿老徐 | 来源:发表于2018-10-26 10:33 被阅读22次

    一、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接口简要说明

          本文链接:https://www.haomeiwen.com/subject/wvhktqtx.html