网友俱乐部 » » JAVA教程 » Java关于克隆与“冷藏”和“解冻”方法

2008-1-7 14:32 ljjk5
Java关于克隆与“冷藏”和“解冻”方法

 Java关于克隆方法[font=NSimsun]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();
  }
}[/font]   Java关于“冷藏”和“解冻”方法

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.