1阁吝、transient關(guān)鍵字只能修飾變量漆际,而不能修飾方法和類。
2滨嘱、被transient關(guān)鍵字修飾的變量不再能被序列化峰鄙,一個(gè)靜態(tài)變量不管是否被transient修飾,均不能被序列化太雨。
3吟榴、一旦變量被transient修飾,變量將不再是對象持久化的一部分囊扳,該變量內(nèi)容在序列化后無法獲得訪問吩翻。也可以認(rèn)為在將持久化的對象反序列化后兜看,被transient修飾的變量將按照普通類成員變量一樣被初始化。
package com.design.prompt;
import java.io.Serializable;
public class UserTest implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6522988290199824802L;
private String username;
transient String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.design.prompt;
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 org.junit.Test;
public class TransientTest {
@Test
public void test_transient() {
UserTest ut = new UserTest();
ut.setUsername("jane");
ut.setPassword("123456");
System.out.println("read before Serializable: ");
System.out.println("before username: " + ut.getUsername());
System.err.println("before password: " + ut.getPassword());
try {
ObjectOutputStream os = new ObjectOutputStream(
new FileOutputStream("C:/user.txt"));
os.writeObject(ut); // 將User對象寫進(jìn)文件
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream(
"C:/user.txt"));
ut = (UserTest) is.readObject(); // 從流中讀取User的數(shù)據(jù)
is.close();
System.out.println("\nread after Serializable: ");
System.out.println("after username: " + ut.getUsername());
System.err.println("after password: " + ut.getPassword());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
執(zhí)行結(jié)果:
before password: 123456
read before Serializable:
before username: jane
after password: null
read after Serializable:
after username: jane