Java关键字transient概念和一个例子
2017-12-07 16:58
369 查看
百度百科提到:java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。
java的serialization提供了一个非常棒的存储对象状态的机制,说白了serialization就是把对象的状态存储到硬盘上去,等需要的时候就可以再把它读出来使用。但是在存储对象状态时,我们有时候会需要特定的对象数据在serialization时不进行存储。这时候transient关键字就派上用场了。要关掉类的特定的数据域,可以使用transient关键字进行定义,这对于底层的java虚拟机来说,这个transient类型的变量不是一个类的永久性的状态。
例子介绍:
import java.io.*; public class UserInfo implements Serializable { private static final long serialVersionUID = 996890129747019948L; private String name; private transient String psw; public UserInfo(String name, String psw) { this.name = name; this.psw = psw; } public String toString() { return "name=" + name + ", psw=" + psw; } } class TestTransient { public static void main(String[] args) { UserInfo userInfo = new UserInfo("张三", "123456"); System.out.println(userInfo); try { // 序列化,被设置为transient的属性没有被序列化 ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("UserInfo.out")); o.writeObject(userInfo); o.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } try { // 重新读取内容 ObjectInputStream in = new ObjectInputStream(new FileInputStream("UserInfo.out")); UserInfo readUserInfo = (UserInfo) in.readObject(); //读取后psw的内容为null System.out.println(readUserInfo.toString()); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }
输出结果:name=张三, psw=123456
name=张三, psw=null
我们可以看到读进去的password为123456,但是读出来的却是null,因为在serialization时,没有存储到硬盘上,因为pwd被定义为transient类型的
相关文章推荐
- java中Timer的概念是什么举一个例子
- 一个具体的例子学习Java volatile关键字
- java关键字——transient
- java中的Transient关键字
- 用一个例子阐明IT系统整合这个概念
- Java transient关键字
- 利用java实现的一个发送手机短信的小例子
- Java transient关键字
- java中如何写一个死锁例子
- 一个经典例子让你彻彻底底理解java回调机制
- 一个 Java 的 Socket 服务器和客户端通信的例子
- 关于JAVA匿名内部类我的理解,举一个小例子阐述。
- 从EntLib(1.0)的一个例子理解身份验证的三个概念。
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- java transient关键字 阻止字段被序列化
- Java引用传递的一个例子
- Java中对象的串行化(Serialization)和transient关键字
- 02_java基础_一个例子认识变量定义及其好处
- Java不常用的关键字介绍 native,strictfp,transient,volatile
- 一个例子说明java局部代码块、静态代码块、构造代码块区别