- /*
- *实现序列化的克隆.
- *
- *
- *确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象
- 随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以
- 有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,
- 可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些
- 保存下来的对象。这种情况下就要用到对象的序列化。
- *
- *
- *
- */
- 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;
- }
- }