赛迪网 > IT技术 Java > 技术动态
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

Java关于克隆与“冷藏”和“解冻”方法

发布时间:2007.08.28 06:20     来源:赛迪网    作者:dxaw

import java.awt.Point;
import java.io.IOException;

import com.sun.corba.se.impl.io.OptionalDataException;

/**
 * 克隆测试<br>
 * 以方形类为例,比较了深克隆(deep clone)与浅克隆(shallow clone)的异同
 * 
 * @see #clone()
 * @author 88250
 * @version 1.0.0, 2007-8-26
 */
public class CloneTester
{
    private Square square = new Square();

    private Square cpySquare = null;

    /**
     * 浅克隆操作
     */
    public void shallowClone()
    {
    square.setSideLength(2);
    square.setLocation(new Point(2, 5));
    // 浅克隆
    cpySquare = (Square) square.clone();

    }

    /**
     * 深克隆操作
     */
    public void deepClone()
    {
    square.setSideLength(3);
    square.setLocation(new Point(1, 3));
    // 深克隆
    try
    {
        cpySquare = (Square) square.deepClone();
    }
    catch (OptionalDataException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    catch (ClassNotFoundException e)
    {
        e.printStackTrace();
    }
    }

    /**
     * 克隆结果输出
     */
    public void cloneDisplay()
    {

    System.out.println("原始方形长度:" + square.getSideLength());
    System.out.println("克隆方形长度:" + cpySquare.getSideLength());

    System.out.println("原始方形==克隆方形?" + (square == cpySquare));

    System.out.println("原始方形的位置==克隆方形的位置?"
        + (square.getLocation() == cpySquare.getLocation()));
    }

    public static void main(String[] args)
    {
    CloneTester sm = new CloneTester();
    sm.shallowClone();
    sm.cloneDisplay();

    sm.deepClone();
    sm.cloneDisplay();
    }
}

import java.awt.Point;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import com.sun.corba.se.impl.io.OptionalDataException;

/**
 * 正方形
 * 
 * @author 88250
 * @version 1.0.0, 2007-8-26
 */
public class Square implements Cloneable, Serializable
{
    private Point location = new Point(0, 0);

    private float sideLength = 1F;

    @Override
    public Object clone()
    {
    Square tmp = null;
    try
    {
        tmp = (Square) super.clone();
    }
    catch (CloneNotSupportedException cnse)
    {
        cnse.printStackTrace();
    }
    finally
    {
        return tmp;
    }
    }
    
    /**
     * 深克隆方法
     * @return
     */
    public Object deepClone()
    throws IOException, OptionalDataException, ClassNotFoundException
    {
    // 首先将对象写到流里
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream oo = new ObjectOutputStream(bo);
    oo.writeObject(this);
    
    // 然后将对象从流里读出来
    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
    ObjectInputStream oi = new ObjectInputStream(bi);
    
    return (oi.readObject());
    }

    /**
     * @return the location
     */
    public Point getLocation()
    {
        return location;
    }

    /**
     * @param location the location to set
     */
    public void setLocation(Point location)
    {
        this.location = location;
    }

    /**
     * @return the sideLength
     */
    public float getSideLength()
    {
        return sideLength;
    }

    /**
     * @param sideLength the sideLength to set
     */
    public void setSideLength(float sideLength)
    {
        this.sideLength = sideLength;
    }

}

(责任编辑:龚勋)


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· 严肃规矩的Java中也可以动态灵活 (08-27) · 基于Web2.0的AJAX十大安全漏洞以及成因 (08-24)
· Spring+Hibernate+Struts优势地位凸显 (08-23) · 使用Java程序的泛型应该注意的几个地方 (08-23)
· Java2 参考大全:世界一流的程序设计大师Herb (08-21) · 时代新潮流 UML Programming Guide 设计核心 (08-21)
· 对知识坚持不懈的追求,有朝一日你会成功! (08-21) · JAVA编程技巧之如何实现HTTP的断点续传 (08-21)
· 想动就“动”-Java也可以变得“动态”灵活 (08-21) · 热点关注--难道Java真的已经过时了吗? (08-21)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 工信部“三定”公布 总编制731名设24司局
· 北京发电子商务监管意见 营利性网店须办照
· 直播 08中国城市信息化高峰论坛 案例点评
· 烽火网络校园解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统