Java中transientkeyword的应用
今天跟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的应用相关推荐
- java中实现具有传递性吗_Java中volatile关键字详解,jvm内存模型,原子性、可见性、有序性...
一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...
- java中调用python
在Java中调用Python </h1><div class="clear"></div><div class="postBod ...
- java中hashcode_浅谈Java中的Hash值
1.Hash值有什么用? HashMap.HashTable.HashSet,所以涉及到使用Hash值进行优化存储的地方,都会用到HashCode.HashCode是Key,这种计算为提高计算的性能. ...
- JAVA中获取当前系统时间
JAVA中获取当前系统时间 转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输 ...
- Java中的对象和包
什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象. 对象的三个特点 1 对象的行为:这个对象能做什么, 例如包子是用来吃的 2 对象的状态:对象保持的一种状态,例如这个包子是热的还是凉 ...
- java中标识符,关键字,数据类型
什么是标识符? 在java语言中用来给一个类,变量或方法命名的符号 标识符的命名规则 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包含 @.%.空格等其它特殊字符,不能以数字开头. ...
- Java中byte与16进制字符串的互相转换
https://www.cnblogs.com/qinwangchen/p/5418028.html * Convert byte[] to hex string.这里我们可以将byte转换成int, ...
- JAVA中priorityqueue详解
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...
- 使用java中replaceAll方法替换字符串中的反斜杠
今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...
最新文章
- Java 获取Web项目相对webapp地址
- ORACLE中创建如何创建表,并设置结构和默认值
- Discuz 7.2 /faq.php SQL注入漏洞
- Linux常用命令大全(归类)
- 【读书笔记】—— 西方人文社科经典
- 在Eclipse中实现C++ 11的完整支持
- 安徽大学本科毕业论文中英文题目修改指南
- mmorpg无缝地图
- 巴西柔术第一课:骑乘式上位技术
- 做一个“有意思”的人
- Android 9的神经网络API
- 又双叒叕夺冠!5年厚积薄发,汇佳学校绿龙冰球队今夏“京城双冠王”!
- 伍伦贡大学计算机科学,计算机技术(科学)专业
- afrog的安装与使用
- 红旗linux和其他版本区别,Ubuntu Linux与红旗Linux系列的差别
- QT-事件机制学习笔记
- 从零打造一个机器人002【初识机器人操作系统--ROS】
- OSC源创会(西安)图文总结
- Qt模拟键盘按键与组合键
- 【python种子项目ppc】保姆级别指导给项目添加测试
热门文章
- mac解压错误22无效的参数_看看PHP 7.3新版本中的JSON错误处理
- 上海市高校计算机一级考试试题,上海市计算机一级考试试题
- 求平均值程序c语言,编写求一组整数的和与平均值的程序
- AcWing 827. 双链表
- mysql 客户端乱码_mysql客户端中文乱码
- 大学c语言第三章作业,c语言程序设计一章部分和第三章习题答案.doc
- 生存分析——泊松回归(LightGBM)实现生存分析(四)
- R语言︱用excel VBA把xlsx批量转化为csv格式
- linux常用命令-第一篇
- Linux 下安装JDK1.8