《Java基础知识》Java transient关键字详解
前言
在看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实现的序列化和反序列化屏蔽赋值。
This moment will nap, you will have a dream; But this moment study,you will interpret a dream.