Java关于克隆与“冷藏”和“解冻”方法
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();
}
}