“transient”——“瞬态”,先不说这个翻译是否恰当,这个变量关键字一直不曾使用,简单的说就是被瞬态定义的变量不可序列号。或者这么给他换个名字——“不可序列化状态”。
打个比方,如果一个用户有一些敏感信息(譬如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输。这些信息对应的变量就可以被定义为transient类型。换句话说,这个字段的生命周期仅存于调用者的内存中。 如定义类: public class People implements Serializable { private static final long serialVersionUID = 8294180014912103005L; /** * 用户名 */ private String username; /** * 密码 */ private transient String password; } 密码字段为transient,这时候如果对该对象进行序列化,这个密码字段是不会被保存的。 以下例子展示了这个行为: public static void main(String[] args) throws Exception { People p = new People(); p.setUsername("snowolf"); p.setPassword("123456"); System.err.println("------操作前------"); System.err.println("username: " + p.getUsername()); System.err.println("password: " + p.getPassword()); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream( "people.txt")); oos.writeObject(p); oos.flush(); oos.close(); ObjectInputStream ois = new ObjectInputStream(new FileInputStream( "people.txt")); p = (People) ois.readObject(); ois.close(); System.err.println("------操作后------"); System.err.println("username: " + p.getUsername()); System.err.println("password: " + p.getPassword()); } 执行结果是: ------操作前------ username: snowolf password: 123456 ------操作后------ username: snowolf password: null |
|
来自: 蓝调书轩 > 《JAVA Web》