Java clone()方法 与 Cloneable接口详解

  • clone()Object类的一个方法

    protected native Object clone() throws CloneNotSupportedException;
    
  • 调用clone()的条件

    被复制对象的类必须

    • 实现java.lang.Cloneable接口
    • (或)其某个父类实现Cloneable接口
    • (或)实现了Cloneable的子接口

    如果没有满足以上条件之一就直接调用clone(),则会在运行时抛出CloneNotSupportedException异常

  • Cloneable接口

    package java.lang;
    
    public interface Cloneable {
    }
    

    Cloneable是一个标记接口(marker interface),其并没有声明任何方法,只是用来标记 “可以使用clone方法进行复制”。

  • clone()进行的是浅复制(shallow copy)

    clone()将被复制实例的字段值直接复制到新的实例中,并不考虑字段中实际所保存的内容。

    例如,如果字段中保存的是数组,则只会复制该数组的引用,并不会一一复制数组中的元素。

    clone()在进行复制时也不会调用被复制实例的构造函数。

  • clone()的执行过程

    1. 分配与要复制的实例同样大小的内存空间;
    2. 将要复制的实例中的字段的值复制到所分配的内存空间中去。
  • 可以通过覆写clone()来实现自己的copy逻辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值