java的 clone方法详解编程语言

1.java语言中没有明确提供指针的概念与用法,而实质上每个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如果取操作这个指针而已。

2.在java中处理基本数据类型时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按值引用传递(传递的是对象的一个引用)的方式进行。除了在函数调用时是引用传递,在使用=复制时也是采用引用传递。

实现

package cloneDemo; 
 
import java.util.Date; 
 
public class Trousers implements Cloneable 
{ 
 
    private int id; 
    private Date productDate = new Date(); 
 
    public int getId() 
    { 
        return id; 
    } 
 
    public void setId(int id) 
    { 
        this.id = id; 
    } 
 
    public Date getProductDate() 
    { 
        return productDate; 
    } 
 
    public void setProductDate(Date productDate) 
    { 
        this.productDate = productDate; 
    } 
 
    private void changeDate() 
    { 
        this.productDate = new Date(System.currentTimeMillis() - 60 * 60 * 1000 
                * 24 * 7); 
 
    } 
 
    public Object clone() 
    { 
        Trousers o = null; 
        try 
        { 
            o = (Trousers) super.clone(); 
        } catch (CloneNotSupportedException e) 
        { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
        // 实现深复制 
        o.productDate = (Date) this.getProductDate().clone(); 
        return o; 
    } 
 
    public static void main(String[] args) 
    { 
        Trousers t = new Trousers(); 
        Trousers x = (Trousers) t.clone(); 
        x.changeDate(); 
        System.out.println(t.getProductDate()); 
        System.out.println(x.getProductDate()); 
    } 
} 
 
执行结果 
Sun Aug 14 19:17:12 CST 2016 
Sun Aug 07 19:17:12 CST 2016

 

3.当类中包含了一些对象时,就需要用到深复制了,实现方法是在对对象调用clone()方法完成复制后,接着对对象中的非基本类型的属性也调用clone()方法,完成深复制。

浅复制:复制对象的所有变量都含有与原来对象相同的值,而所有对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。

深复制:在浅复制的基础上,深复制吧复制的对象所引用的对象都复制了一边。

 

大部分内容来自《java程序员面试笔试宝典》何昊等著

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15376.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论