Posted on 2007-10-10 01:17
Java蜘蛛人 --郑成桥 阅读(320)
评论(0) 编辑 收藏
/**//*
*实现序列化的克隆.
*
*
*确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象
随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以
有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,
可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些
保存下来的对象。这种情况下就要用到对象的序列化。
*
*
*
*/
import java.util.*;
import java.io.*;
public class SerialCloneTest
{
public static void main (String[] args)
{
Employee harry=new Employee("Harry Hacke",3500,1989,10,1);
Employee harry2=(Employee)harry.clone();
harry.lixi(50);
System.out.println (harry);
System.out.println (harry2);
}
}
class SerialCloneable implements Cloneable,Serializable
{
public Object clone()
{
try
{
ByteArrayOutputStream bout=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(bout);
out.writeObject(this);
out.close();
ByteArrayInputStream bin=new ByteArrayInputStream(bout.toByteArray());
ObjectInputStream in=new ObjectInputStream(bin);
Object ret=in.readObject();
in.close();
return ret;
}
catch(Exception e)
{
e.printStackTrace();
return null;
}
}
}
class Employee extends SerialCloneable //Employee 继承了SerialCloneable 就有他的克隆方法
{
private String name;
private double salary;
private Date hireDay;
public Employee(String n,double s,int year,int month,int day)
{
name=n;
salary=s;
GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
hireDay=calendar.getTime();
}
public String getName()
{
return name;
}
public double getSalary()
{
return salary;
}
public Date getHireDay()
{
return hireDay;
}
public String toString()
{
return getClass().getName()+" name:"+name
+" salary"+salary
+" hireDay:"+hireDay;
}
public void lixi(double b)
{
double aa=salary*b/100;
salary+=aa;
}
}