Java中transient关键字的详细总结

作者:老鼠只爱大米 时间:2021-12-11 03:19:33 

一、概要介绍   

本文要介绍的是Java中的transient关键字,transient是短暂的意思。对于transient 修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。

1. 序列化

Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输。一般地,当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让实体类实现Serializable接口,目的就是为了让其可序列化。当然,序列化后的最终目的是为了反序列化,恢复成原先的Java对象实例。所以序列化后的字节序列都是可以恢复成Java对象的,这个过程就是反序列化。

2. 为什么要用transient关键字?

在持久化对象时,对于一些特殊的数据成员(如用户的密码,银行卡号等),我们不想用序列化机制来保存它。为了在一个特定对象的一个成员变量上关闭序列化,可以在这个成员变量前加上关键字transient。

3. transient的作用

transient是Java语言的关键字,用来表示一个成员变量不是该对象序列化的一部分。当一个对象被序列化的时候,transient型变量的值不包括在序列化的结果中。而非transient型的变量是被包括进去的。  注意static修饰的静态变量天然就是不可序列化的。

Java中transient关键字的详细总结

Java中transient关键字的详细总结

Java中transient关键字的详细总结

二、transient使用总结

(1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法被访问。
(2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
(3)一个静态变量不管是否被transient修饰,均不能被序列化(如果反序列化后类中static变量还有值,则值为当前JVM中对应static变量的值)。序列化保存的是对象状态,静态变量保存的是类状态,因此序列化并不保存静态变量。

Java中transient关键字的详细总结

Java中transient关键字的详细总结

三、使用场景

(1)类中的字段值可以根据其它字段推导出来,如一个长方形类有三个属性长度、宽度、面积,面积不需要序列化。
(2) 一些安全性的信息,一般情况下是不能离开JVM的。
(3)如果类中使用了Logger实例,那么Logger实例也是不需要序列化的

来源:https://blog.csdn.net/u012723673/article/details/80699029

标签:Java,transient
0
投稿

猜你喜欢

  • MultipartFile中transferTo(File file)的路径问题及解决

    2023-11-12 00:07:08
  • 详解Java中的泛型

    2021-12-02 14:57:34
  • 一篇文章带你了解JAVA结构化编程详情

    2022-01-15 13:06:34
  • java内存溢出示例(堆溢出、栈溢出)

    2021-08-12 19:11:57
  • Java使用WatchService监控文件内容变化的示例

    2023-02-15 10:10:19
  • C#截图程序类似腾讯QQ截图实现代码

    2023-05-07 04:01:01
  • Android 使用mediaplayer播放res/raw文件夹中的音乐的实例

    2023-12-19 08:28:11
  • C#遍历List并删除某个元素的方法

    2023-03-22 10:22:08
  • IntelliJ IDEA 2020.1.2激活工具下载及破解方法免费可用至2089年(强烈推荐)

    2023-07-29 09:22:11
  • Android Apk反编译及加密教程

    2022-01-13 01:01:25
  • Spring RestTemplate的使用与踩坑

    2022-01-12 21:43:14
  • Java jpa外连接查询join案例详解

    2022-12-17 18:31:15
  • C#十五子游戏编写代码

    2023-06-13 07:33:22
  • Java rmi远程方法调用基本用法解析

    2023-02-20 08:44:19
  • 一篇文章带你深入了解Java类加载

    2023-06-11 22:12:00
  • jcrop 网页截图工具(插件)开发

    2022-10-21 22:30:19
  • 如何在XML中定义菜单

    2023-08-08 11:49:33
  • java基础之Object类

    2022-11-17 21:20:10
  • JDK线程池和Spring线程池的使用实例解析

    2023-02-24 13:27:32
  • 一起来了解Java的File类和IO流

    2022-04-12 09:23:15
  • asp之家 软件编程 m.aspxhome.com