教大家实现序列化的克隆

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

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;
    }

}


你可能感兴趣的:(教大家实现序列化的克隆)