【J2SE】Java实现序列化

  1. /*
  2.  *实现序列化的克隆.
  3.  *
  4.  *
  5.  *确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象
  6. 随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以
  7. 有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,
  8. 可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些
  9. 保存下来的对象。这种情况下就要用到对象的序列化。
  10.  *
  11.  *
  12.  *
  13.  */
  14. import java.util.*;
  15. import java.io.*;
  16. public class SerialCloneTest
  17. {
  18.     public static void main (String[] args) 
  19.     {
  20.         Employee  harry=new Employee("Harry Hacke",3500,1989,10,1);
  21.         
  22.         Employee harry2=(Employee)harry.clone();
  23.         
  24.         harry.lixi(50);
  25.         System.out.println (harry);
  26.         System.out.println (harry2);
  27.     }
  28. }
  29. class SerialCloneable implements Cloneable,Serializable
  30. {
  31.     public Object clone()
  32.     {
  33.         try
  34.         {
  35.             ByteArrayOutputStream bout=new ByteArrayOutputStream();  
  36.             ObjectOutputStream out=new ObjectOutputStream(bout);
  37.             out.writeObject(this);
  38.             out.close();
  39.             
  40.             ByteArrayInputStream bin=new ByteArrayInputStream(bout.toByteArray());
  41.             ObjectInputStream in=new ObjectInputStream(bin);
  42.             Object ret=in.readObject();
  43.             in.close();
  44.             return ret;
  45.         }
  46.         catch(Exception e)
  47.         {
  48.             e.printStackTrace();
  49.             return null;
  50.         }
  51.     }
  52. }
  53. class Employee extends SerialCloneable   //Employee 继承了SerialCloneable 就有他的克隆方法
  54. {
  55.     private String name;
  56.     private double salary;
  57.     private Date hireDay;
  58.     public Employee(String n,double s,int year,int month,int day)
  59.     {
  60.         name=n;
  61.         salary=s;
  62.         GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
  63.         hireDay=calendar.getTime();
  64.     }
  65.     public String getName()
  66.     {
  67.         return name;
  68.     }
  69.     public double getSalary()
  70.     {
  71.         return salary;
  72.     }
  73.     public Date getHireDay()
  74.     {
  75.         return hireDay;
  76.     }
  77.     public String toString()
  78.     {
  79.         return getClass().getName()+"   name:"+name
  80.             +"   salary"+salary
  81.                 +"   hireDay:"+hireDay;
  82.     }
  83.     public void lixi(double b)
  84.     {
  85.         double aa=salary*b/100;
  86.         salary+=aa;
  87.     }
  88. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值