zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    通过anaconda进行python多版本控制
    搭建java环境
    windows安装 Microsoft Visual c++
    更改jupyter notebook的主题颜色(theme) 包括pycharm
    linux服务器安装anaconda,然后远程使用jupyter
    根据经纬度坐标计算距离-python
    Redis相关链接
    VBA笔记-参考教程
    用sklearn计算卡方检验P值
    linux创建新用户
  • 原文地址:https://www.cnblogs.com/xiaotian15/p/3665316.html
Copyright © 2011-2022 走看看