Java transient關鍵字使用

      我們都知道一個對象只要實現了Serilizable接口,這個對象就可以被序列化,java的這種序列化模式爲開發者提供了很多便利,我們可以不必關係具體序列化的過程,只要這個類實現了Serilizable接口,這個類的所有屬性和方法都會自動序列化。

      然而在實際開發過程中,我們常常會遇到這樣的問題,這個類的有些屬性需要序列化,而其他屬性不需要被序列化,java的transient關鍵字爲我們提供了便利,你只需要實現Serilizable接口,將不需要序列化的屬性前添加關鍵字transient,序列化對象的時候,這個屬性就不會序列化到指定的目的地中。

     此外,如果利用transient修飾靜態屬性時,不能被序列化。

     測試程序如下:

package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;


/****
 * 測試Transient關鍵字
 */
public class TransientTest {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("zhangsan");
user.setAge(30);
user.setFlag("flag");
System.out.println(user + " " + user.getFlag());


ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(new File("C:\\Users\\test\\Desktop\\test.txt")));
oos.writeObject(user);
oos.flush();
oos.close();


ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(new File("C:\\Users\\test\\Desktop\\test.txt")));
user = (User) ois.readObject();
ois.close();


System.out.println(user + " " + user.getFlag());
}
}


class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private transient int age;
private transient static String flag;


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public int getAge() {
return age;
}


public void setAge(int age) {
this.age = age;
}


public static String getFlag() {
return flag;
}


public static void setFlag(String flag) {
User.flag = flag;
}


@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}

測試結果:

User [name=zhangsan, age=30] flag
User [name=zhangsan, age=0] flag


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章