今天跟JDK源代码的时候发现transient ,感觉从来没见过,于是用google查了一下.

Java语言的keyword,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包含在串行化的表示中,然而非transient型的变量是被包含进去的。

以下我们查创建一个LoginFile的类:

public class LoginFile implements Serializable{private static final long serialVersionUID = 1L;private String name = null;private transient String pwd = null;public LoginFile() {name = "shirdey";pwd = "654321";}public String toString(){return "ClassName:LoginFile"+"\nname = "+name+"\npwd = "+pwd;}
}

然后初始化LoginFile对象,将该对象写到硬盘上:

LoginFile loginFile = new LoginFile();System.out.println(loginFile.toString());try {ObjectOutputStream outputStream = new ObjectOutputStream (new FileOutputStream("login.out"));outputStream.writeObject(loginFile);outputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();}

此时打开login.out文件看不到pwd字段没,然后我们通过读取login.out測试一下:

try {ObjectInputStream inputStream  = new ObjectInputStream(new FileInputStream("login.out"));LoginFile loginFile = (LoginFile) inputStream.readObject();System.out.println(loginFile.toString());} catch (Exception e) {}

output:

ClassName:LoginFile
name = shirdey
pwd = null

非常明显,被transient改动的pwd字段并没有被保存在硬盘

当串行化某个对象时,如果该对象的某个变量是transient。那么这个变量不会被串行化进去。

也就是说,如果某个类的成员变量是transient,那么当通过ObjectOutputStream把这个类的某个实例保存到磁盘上时,实际上transient变量的值是不会保存的。

由于当从磁盘中读出这个对象的时候,对象的该变量会没有被赋值。

另外这篇文章还提到,当从磁盘中读出某个类的实例时,实际上并不会运行这个类的构造函数,而是读取这个类的实例的状态。而且把这个状态付给这个类的对象。

这点我曾经似乎不知道。

參考文献:http://www.devx.com/tips/Tip/13726

转载于:https://www.cnblogs.com/jzdwajue/p/7254084.html

Java中transientkeyword的应用相关推荐

  1. java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  2. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

  3. java中hashcode_浅谈Java中的Hash值

    1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...

  4. JAVA中获取当前系统时间

    JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...

  5. Java中的对象和包

    什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象. 对象的三个特点 1  对象的行为:这个对象能做什么, 例如包子是用来吃的 2  对象的状态:对象保持的一种状态,例如这个包子是热的还是凉 ...

  6. java中标识符,关键字,数据类型

    什么是标识符? 在java语言中用来给一个类,变量或方法命名的符号 标识符的命名规则 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. ...

  7. Java中byte与16进制字符串的互相转换

    https://www.cnblogs.com/qinwangchen/p/5418028.html * Convert byte[] to hex string.这里我们可以将byte转换成int, ...

  8. JAVA中priorityqueue详解

    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...

  9. 使用java中replaceAll方法替换字符串中的反斜杠

    今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...

最新文章

  1. Java 获取Web项目相对webapp地址
  2. ORACLE中创建如何创建表,并设置结构和默认值
  3. Discuz 7.2 /faq.php SQL注入漏洞
  4. Linux常用命令大全(归类)
  5. 【读书笔记】—— 西方人文社科经典
  6. 在Eclipse中实现C++ 11的完整支持
  7. 安徽大学本科毕业论文中英文题目修改指南
  8. mmorpg无缝地图
  9. 巴西柔术第一课:骑乘式上位技术
  10. 做一个“有意思”的人
  11. Android 9的神经网络API
  12. 又双叒叕夺冠!5年厚积薄发,汇佳学校绿龙冰球队今夏“京城双冠王”!
  13. 伍伦贡大学计算机科学,计算机技术(科学)专业
  14. afrog的安装与使用
  15. 红旗linux和其他版本区别,Ubuntu Linux与红旗Linux系列的差别
  16. QT-事件机制学习笔记
  17. 从零打造一个机器人002【初识机器人操作系统--ROS】
  18. OSC源创会(西安)图文总结
  19. Qt模拟键盘按键与组合键
  20. 【python种子项目ppc】保姆级别指导给项目添加测试

热门文章

  1. mac解压错误22无效的参数_看看PHP 7.3新版本中的JSON错误处理
  2. 上海市高校计算机一级考试试题,上海市计算机一级考试试题
  3. 求平均值程序c语言,编写求一组整数的和与平均值的程序
  4. AcWing 827. 双链表
  5. mysql 客户端乱码_mysql客户端中文乱码
  6. 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc
  7. 生存分析——泊松回归(LightGBM)实现生存分析(四)
  8. R语言︱用excel VBA把xlsx批量转化为csv格式
  9. linux常用命令-第一篇
  10. Linux 下安装JDK1.8