内容简介:之前写过一篇序列化相关的文章,今天要讲的这个文件自transient也是跟序列化有关系的。但是,挺多人没有了解过该关键字甚至是不知道该关键字的存在。在Java中,当一个类实现了java.io.Serializable接口,即表明了该类可以被序列化。我们可以把该类的属性序列化然后保存在外部,或者跟另外一个jvm进行数据传递。但是,我们是否想过,如果一个类包含隐私信息,如用户的密码等,那么这个属性就不能够被序列化到外部。当然,我们可以在序列化之前手动set该值为null,但是最优雅的做法就是使用transien
之前写过一篇序列化相关的文章,今天要讲的这个文件自transient也是跟序列化有关系的。但是,挺多人没有了解过该关键字甚至是不知道该关键字的存在。
transient关键字介绍
在 Java 中,当一个类实现了java.io.Serializable接口,即表明了该类可以被序列化。我们可以把该类的属性序列化然后保存在外部,或者跟另外一个jvm进行数据传递。但是,我们是否想过,如果一个类包含隐私信息,如用户的密码等,那么这个属性就不能够被序列化到外部。当然,我们可以在序列化之前手动set该值为null,但是最优雅的做法就是使用transient关键字。
在我们不想序列化到外部的属性前面加上transient关键字,该属性将不会被序列化。
代码测试
假设我们有User对象如下:
@Data public class User implements Serializable { private String username; private transient String password; } 复制代码
通过序列化 工具 类序列化和反序列化:
@Test public void test() { User user = new User(); user.setUsername("happyjava"); user.setPassword("123456"); System.out.println("序列化之前:" + user.toString()); byte[] serialize = SerializationUtils.serialize(user); User newUser = SerializationUtils.deserialize(serialize); System.out.println("反序列化:" + newUser); } 复制代码
运行结果如下:
通过结果可以看到,反序列化之后没有存在password字段,这反向的证明了序列化的时候没有把password参与到序列化中去。这正是transient关键字的用处。
静态属性序列化问题
可能有读者会想到,如果静态属性加上transient会怎么样?反序列化回来之后是不是该类的静态属性就编程null了?下面通过代码来验证下:
给User添加属性count:
private transient static int count; 复制代码
这是一个静态属性。
先把该属性设置为10,然后序列化、反序列化一个类,再查看该静态属性:
@Test public void test() { User user = new User(); User.setCount(10); user.setUsername("happyjava"); user.setPassword("123456"); System.out.println("序列化之前:" + user.toString()); System.out.println("user count:"+User.getCount()); byte[] serialize = SerializationUtils.serialize(user); User newUser = SerializationUtils.deserialize(serialize); System.out.println("反序列化:" + newUser); System.out.println("user count:" + User.getCount()); } 复制代码
输出结果如下:
从结果看,静态属性没有发生改变。其实,不管有没有加transient关键字,静态属性都不会被序列化。
总结
1)一旦变量被transient修饰,变量将不再是对象持久化的一部分。
2)transient关键字只能修饰变量,而不能修饰方法和类。
3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 番外篇2-基本规范、注释、static关键字、import关键字
- 说说iOS中的常用的关键字static ,class(仅限Swift关键字)
- Golang 关键字
- 2019 关键字
- golang关键字
- final关键字深入解析
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
技术元素
[美] 凯文·凯利 / 张行舟、余倩、周峰、管策、金鑫、曾丹阳、李远、袁璐 / 译言·东西文库/电子工业出版社 / 2012-5 / 55.00元
我会将我不成熟的想法、笔记、内心争论、草稿以及对其他文章的回应都写在《技术元素》中,这样我就能知道自己到底在想些什么。——KK “技术元素”(technium)是凯文•凯利专门创造出来的词语。“技术元素不仅仅包括一些具象的技术(例如汽车、雷达和计算机等),它还包括文化、 法律、社会机构和所有的智能创造物。”简而言之,技术元素就是从人的意识中涌现出来的一切。KK把这种科技的延伸面看成一个能产生......一起来看看 《技术元素》 这本书的介绍吧!