关于Java中的transient关键字

Java中的transient关键字是在序列化时候用的,如果用transient修饰变量,那么该变量不会被序列化。

下面的例子中创建了一个Student类,有三个成员变量:id,name,age。age字段被transient修饰,当该类被序列化的时候,age字段将不被序列化。

 1 import java.io.Serializable;  
 2 public class Student implements Serializable{  
 3  int id;  
 4  String name;  
 5  transient int age;//Now it will not be serialized  
 6  public Student(int id, String name,int age) {  
 7   this.id = id;  
 8   this.name = name;  
 9   this.age=age;  
10  }  
11 }  

来创建一个用序列化的类:

 1 import java.io.*;  
 2 class PersistExample{  
 3  public static void main(String args[])throws Exception{  
 4   Student s1 =new Student(211,"ravi",22);//creating object  
 5   //writing object into file  
 6   FileOutputStream f=new FileOutputStream("f.txt");  
 7   ObjectOutputStream out=new ObjectOutputStream(f);  
 8   out.writeObject(s1);  
 9   out.flush();  
10   out.close();  
11   f.close();  
12   System.out.println("success");  
13  }  
14 }  
Output: success

再来创建一个反序列化的类:

1 import java.io.*;  
2 class DePersist{  
3  public static void main(String args[])throws Exception{  
4   ObjectInputStream in=new ObjectInputStream(new FileInputStream("f.txt"));  
5   Student s=(Student)in.readObject();  
6   System.out.println(s.id+" "+s.name+" "+s.age);  
7   in.close();  
8  }  
9 }  
Output:211 ravi 0

由此可见,Student的age字段并未被序列化,其值为int类型的默认值:0.

posted @ 2016-11-27 16:57  HarrisonHao  阅读(286)  评论(0编辑  收藏  举报