[JAVA] 關於修飾字 transient

將物件實作了Serilizable ,這個物件即可被序列化,java中這種序列化提供了很多便利,我們不深入探討序列化的過程,只要這個類別實作了Serilizable,這個類別的所有屬性和方法都會自動序列化。

那修飾字 transient 是作什麼用的呢? 
java 的transient關鍵字為我們提供了便利,我們只需要實作Serilizable介面,將不需要序列化的屬性前加上修飾字 transient,序列化物件的時候,這個屬性就不會序列化到指定的目的地中。

直接看實例吧

import java.io.*;
class Test implements Serializable{
	transient int i=2;
	static transient int j = 4;
	int k =6;
}
public class TransientSample{
	public static void main (String[] args){
		String fileName1 = "C:\\TestFile.txt";
		Test obj = new Test();
		obj.i = 3;
		obj.j = 5;
		obj.k = 7;
		
		try {
			FileOutputStream fos = new FileOutputStream(fileName1);
			ObjectOutputStream objo = new ObjectOutputStream(fos);
			objo.writeObject(obj);
			
			FileInputStream fis = new FileInputStream(fileName1);
			ObjectInputStream obji = new ObjectInputStream(fis);
			Test obj1 =(Test) obji.readObject();

			System.out.println(obj1.i + " " + obj1.j + " " + obj1.k);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} 
	}
}

最後的輸出會是
0 5 7

obj.i 因為有加上修飾字  transient ,所以序列化寫入檔案 TestFile.txt 並沒有存入值.

obj.k 因為未加上修飾字  transient ,所以序列化後,給的值會存入檔案 TestFile.txt 中 .

而obj.j 因為修飾字  transient 對static變數是無效的,所以值依然可以帶入檔案 TestFile.txt 中 .