transient關鍵字的做用

代碼以下:java

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


public class MyTest  implements Serializable{

     private static final long serialVersionUID = 1L;
        private  String name="SheepMu";
        private transient int age=24;
        private  Book book=new Book("我是一本書");
        public static void main(String[] args) {
            try
            {
                ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("my.out"));//輸出流保存的文件名爲 my.out ;ObjectOutputStream能把Object輸出成Byte流
                MyTest myTest=new MyTest();
                oos.writeObject(myTest);
                oos.flush();  //緩衝流 
                oos.close(); //關閉流
            } catch (FileNotFoundException e) 
            {        
                e.printStackTrace();
            } catch (IOException e) 
            {
                e.printStackTrace();
            } 
            System.out.println("success");
           fan();
        }
        public  static void fan()//反序列的過程
        {    
             ObjectInputStream oin = null;//局部變量必需要初始化
            try
            {
                oin = new ObjectInputStream(new FileInputStream("my.out"));
            } catch (FileNotFoundException e1)
            {        
                e1.printStackTrace();
            } catch (IOException e1)
            {
                e1.printStackTrace();
            }      
            MyTest mts = null;
            try {
                mts = (MyTest ) oin.readObject();//由Object對象向下轉型爲MyTest對象
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }     
             System.out.println("name="+mts.name);    
             System.out.println("age="+mts.age); 
             System.out.println("書"+mts.book.getBookname());
        }
}

意思就是:測試

book類省略;spa

若是不用transient 關鍵字 修飾的話,每個  測試類中的屬性都會初始化,在返序列化中能夠拿到值指針

(若是在成員變量中出現自身定義的類型,則該類型必須實現serilizable接口)code

若是用transient 修飾的話,則拿到的值爲空甚至出現空指針對象

相關文章
相關標籤/搜索