zoukankan      html  css  js  c++  java
  • 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程序员面试笔试宝典》何昊等著

  • 相关阅读:
    在 MVC 控制器中使用 构造函数时行依赖注入 (IoC)
    跟我学 NHibernate (三)
    跟我学 NHibernate (二)
    跟我学 NHibernate (一)
    使用PetaPoco ORM 框架分页查询
    ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)
    在 mvc 中使用下拉列表
    String.Join() 方法 的用法
    动态为页面添加CSS样式文件引用
    禁止页面内按F5键进行刷新(扩展知识:禁止复制信息内容)
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/5769740.html
Copyright © 2011-2022 走看看