2012-01-24 134 views
0

我有2個類serial1和serial 2. serial1實現Serializable,而serial2沒有。根據理論,我應該得到一個例外,但以下代碼,但它工作正常。爲什麼這樣?沒有實現Serializable的類的序列化

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個+大都會

serial2 + MET1

+1

你認爲你應該有什麼異常? –

+1

附註:您可能不需要將所有內容分離到它自己的try/catch塊中。如果創建'fos'拋出'FileNotFoundException',你真的*仍然想嘗試使'oos'? – Jeffrey

回答

3

你實際上不會序列化serial2。您的mets方法會創建一個局部變量,但只要方法返回,它就會超出範圍,並且有資格進行垃圾回收。

如果您在serial1之內有serial2類型的實例變量,那麼當您嘗試序列化時(假設它是非空值),您會看到一個異常,但本地變量不會成爲問題。

3

我沒有看到你曾經序列化serial2

相關問題