序列化没有实现Serializable的类

时间:2012-01-24 04:08:03

标签: java serializable

我有2个类serial1和serial 2. serial1实现Serializable而serial2没有。根据理论,我应该得到以下代码的Exception,但它工作正常。为什么会这样?

import java.io.*;

public class SerialTest {

    public static void main(String args[]){
        FileOutputStream fos=null;
        ObjectOutputStream oos =null;
        serial1 se = new serial1();
        serial1 sd = null;
        se.mets();
        try {
             fos= new FileOutputStream("serialtest");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos =new ObjectOutputStream(fos);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos.writeObject(se);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        FileInputStream fis=null;
        ObjectInputStream ois = null;

        try {
            fis = new FileInputStream("serialtest");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            sd = (serial1) ois.readObject();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        sd.mets();

    }

}


import java.io.Serializable;

public class serial1 implements Serializable{

    /* public static void main(String []args){      
         serial1 ss = new serial1();
         ss.mets();
     }*/

     public void mets(){
         serial2 s2  = new serial2();
         System.out.println( "serial 1 + mets");
         s2.met1();
     }
}


public class serial2 {

    public void met1(){
        System.out.println("serial2  + met1");
    }

}

--------------------------- * 输出是

序列1 + mets

serial2 + met1

序列1 + mets

serial2 + met1

2 个答案:

答案 0 :(得分:3)

我没有看到你序列化serial2

答案 1 :(得分:3)

您实际上并未对serial2进行序列化。您的mets方法创建了一个局部变量,但是一旦该方法返回,它就会超出范围并且有资格进行垃圾收集。

如果serial2中有serial1类型的实例变量,那么在尝试序列化时会看到异常(假设它是一个非空值),但是局部变量不会有问题。