我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个的所有属性和方法都会自动序列化。

然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,诚然,你可以让这个类来实现Externalizable接口,这个接口是Serilizable的子接口,但是你必须实现readExternal和writeExternal方法,你可以在这两个方法中实现具体属性的反序列化和序列化操作。然而这就意味着你必须在这两个方法中手工编写额外的代码来进行具体属性的序列化。java的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

package com.zslin.list.demo;   import java.io.Serializable;/**  * * @author WQ<br>   * @version 创建时间:2017年6月18日 上午10:33:15<br>  */
public class A implements Serializable{int a;transient String b;public A(int a,String b){this.a = a;this.b = b;}public String toString(){return "a = "+a+",b = "+b;}
}

package com.zslin.list.demo;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;/*** * @author WQ<br>* @version 创建时间:2017年6月18日 上午10:34:09<br>*/
public class TestTransient {public static void main(String[] args) throws IOException,ClassNotFoundException {A a = new A(25, "张三");System.out.println(a);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D://mm.txt"));oos.writeObject(a);oos.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D://mm.txt"));a = (A) ois.readObject();System.out.println(a);}
}

运行结果:

在上面的例子中,我将属性b前添加关键字transient,我们看到虽然我们序列化的对象a的属性值为“张三”,但是当我们反序列化之后发现这个属性为空,说明这个属性没有进行序列化。

transient使用小结 

1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

我们也可以,通过ArrayList 源码中的  elementData  属性,进一步学习transient这一属性。

具体可以参照我的上一篇博客。

以上。

转载于:https://www.cnblogs.com/mr-wuxiansheng/p/7043751.html

关于java的关键字 transient相关推荐

  1. Java 中关键字transient引出序列化与反序列化

    一:transient(临时的)关键字 1.transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被transient关键字修饰的. 2.被transient关键字修饰的变量不 ...

  2. java transient_【转】Java中的关键字 transient

    阅读目录 先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义: Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的 ...

  3. Java基础—序列化关键字transient

    原文作者:老鼠只爱大米 原文地址:Java中transient关键字的详细总结 一.概要介绍 本文要介绍的是Java中的transient关键字,transient是短暂的意思.对于transient ...

  4. Java 关键字 transient

    Java 关键字 transient 转载于:https://www.cnblogs.com/fysola/p/6394626.html

  5. java工作笔记020---Java中的关键字 transient

    技术交流QQ群[JAVA,C,.NET,BigData,AI]:170933152 先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义: Java中对象 ...

  6. java中的关键字transient说明

    这个关键字的作用其实我在写java的序列化机制中曾经写过,不过那时候只是简单地认识,只要其简单的用法,没有深入的去分析.这篇文章就是去深入分析一下transient关键字. 先给出这篇文章的大致脉络 ...

  7. Java关键字transient和volatile小结(转)

    Java关键字transient和volatile小结(转) transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下. tran ...

  8. java input是关键字吗_java 关键字transient

    1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过 ...

  9. java class 关键字_java关键字及其作用

    一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...

最新文章

  1. 【组队学习】【31期】 吃瓜教程——西瓜书+南瓜书
  2. hdu1181变形课dfs/bfs/并查集三种解法(java)
  3. b-spline python_SciPyTutorial-一元B样条插值
  4. centos7.5安装influxdb-1.7.8
  5. 【目标检测_概述】recent advances in deep learning for object detection_2019
  6. 如何更好阅读源代码 .
  7. Shell——变量详解及注意点
  8. 如何通过方法(函数)来实现两个基本数据类型的数值交换
  9. Lua笔记3 函数和数组
  10. tomcat 7配置ssl教程
  11. java外卖系统源码_java外卖订餐系统小项目
  12. 随机积分理论中的几何布朗运动——Brown Motion and Stochastic Process
  13. visual studio 版本的区别
  14. 2019年春运首日 上海三大火车站预计发送旅客35.9万人次
  15. 基于WENET制作AI字幕
  16. ADXL345知识学习总结
  17. 悲观锁、乐观锁、自旋锁和读写锁
  18. mybatis嵌套查询
  19. 【豆舞咖啡】量变到质变
  20. Swiper插件 下载及使用教程

热门文章

  1. 【牛客 - 2B】树(思维,dp,有坑)
  2. 腐蚀单机怎么进_暖气片堵塞是什么原因?要怎么解决呢?
  3. java二分查找递归_java学习之—递归实现二分查找法
  4. 2018第二届河北省大学生程序设计竞赛题解
  5. C++(STL):04---智能指针之weak_ptr
  6. C++:28 --- C++内存布局(上)
  7. C++:05---class和struct
  8. pytorch学习 入门篇(一)
  9. GCC中常用的优化的参数
  10. 算法(5)-leetcode-explore-learn-数据结构-字符串