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

文章作者 100test 发表时间 2007:09:29 12:42:42
来源 100Test.Com百考试题网


import java.awt.Point.

import java.io.IOException.



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



/**

 * 克隆测试
* 以方形类为例,比较了深克隆(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.

    }



}


相关文章


KodoEJB:符合EJB3规范的持久层框架
Java中用Robot类控制鼠标和键盘的方法
EJB3.0 Beehive开发客户反馈系统
使用OptimizeIT进行Java内存泄露的检测
Java关于克隆与“冷藏”和“解冻”方法
FCKeditor编辑器在JAVA中的使用与配置
ring文件资源操作和Web相关工具类盘点
开源技术基础:教你如何熟练使用TOMCAT
为Java程序中添加播放MIDI音乐功能
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛