前言
在看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了。
總結
transient關鍵字可以讓通過接口Serializable實現的序列化和反序列化屏蔽賦值。