在看ArrayList源码的时候遇到了关键字“transient”,可怜的我居然没有遇到过这个关键字,那没有办法只好去找资料了解一下它的功能。
先看一个案例
public class User implements Serializable {
private static final long serialVersionUID = 8294180014912103005L;private String username;
/**
* passwd字段加上了transient关键字,我们就可以看到效果
*/
private transient String passwd;public String getUsername() {
return username;
}public void setUsername(String username) {
this.username = username;
}public String getPasswd() {
return passwd;
}public void setPasswd(String passwd) {
this.passwd = passwd;
}@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", passwd='" + passwd + '\'' +
'}';
}
}
public class TransientTest {
public static void main(String[] args) {
User user = new User();
user.setUsername("Alexia");
user.setPasswd("123456");System.out.println("user: " + user.toString());
try{
File file = new File("src\\demo\\knowledgepoints\\transients\\foo.txt");
//把对象信息写入文件中。
ObjectOutputStream oout = new ObjectOutputStream (new FileOutputStream(file));
oout.writeObject(user);
oout.close();
System.out.println("-----------------序列化前后对比-----------------");
//把对象信息从文件中获取出来。
ObjectInputStream oin = new ObjectInputStream(new FileInputStream(file));
User newUser = (User)oin.readObject(); // 没有强制转换到Person类型
oin.close();
System.out.println("newUser: " + newUser.toString());
}catch(Exception ex){
ex.printStackTrace();
}
}
}
运行效果:

我们可以看到,反序列化出来的对象,passwd的值为null了。