当前位置: 首页 > news >正文

第十六章 Java为什么使用序列化

为何要指定serialVersionUID的值

如果不指定显示serialVersionUID的值,jvm在序列化时会自动生成一个serialVersionUID,跟属性一起序列化,再进行持久化或者网络传输,在反序列化时,jvm会根据属性自动生成一个新版的serialVersionUID,与旧的serialVersionUID进行比较,相同则反序列化成功。

特性

被transient关键字修饰的属性不会被序列化, static属性也不会被序列化。

因为序列化是针对对象的,static属性是优于对象的存在,随着类加载而加载,不会被序列化。

serialVersionUID属性并没有被序列化, JVM在序列化对象时会自动生成一个serialVersionUID, 然后将我们显示指定的serialVersionUID属性值赋给自动生成的serialVersionUID。

transient关键字修饰的属性不会被序列化

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

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

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

transient关键字可以修饰局部变量吗? 不能!

transient关键字只能修饰变量,而不能修饰方法和类。注意,局部变量是不能被transient关键字修饰的,我想因为这些局部变量需要在被序列化的时候引用到,如果这写局部变量被 transient修饰,变量值不被序列化,反序列化后局部变量的值就变成默认值了,此时反序列化就没有意义了。

Java中的变量

  1. 成员变量(实例变量,属性)

  1. 局部变量(本地变量)

  1. 类变量(静态属性)

http://www.lryc.cn/news/39528.html

相关文章:

  • 28岁小公司程序员,无车无房不敢结婚,要不要转行?
  • 出道即封神的ChatGPT,现在怎么样了?
  • 【计算机视觉】CNN 可视化算法
  • 自动抓取服务器巡检、登录、执行命令记录+备份脚本
  • 如何用Python求解微分方程组
  • 【微信小程序】-- 自定义组件 - behaviors(三十九)
  • 【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)
  • Java Web 实战 11 - 多线程进阶之常见的锁策略
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • 3-1 SpringCloud快速开发入门: Ribbon 是什么
  • Java【lambda表达式】语法及使用方式介绍
  • 【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
  • ‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
  • HTTP 3.0来了,UDP取代TCP成为基础协议,TCP究竟输在哪里?
  • 《JavaCV从入门到实战教程合集》介绍和目录
  • Form Generator扩展 文本 组件
  • 【C/C++】必知必会知识点大总结
  • 【JavaScript 逆向】百度旋转验证码逆向分析
  • PCL 点云投影到直线(C++详细过程版)
  • 中缀表达式转后缀表示式,及后缀表达式的运算规则
  • 【C++】STL简介
  • (小甲鱼python)文件永久存储(上)总结 python文件永久存储(创建打开文件、文件对象的各种方法及含义)
  • 甲酸溶液除钠离子,丙酸溶液除钾离子,医药液体除钾
  • 操作系统(2.2)--进程的描述与控制
  • Python连接es笔记四之创建和删除操作
  • 字符串填充到指定长度
  • macOS虚拟机安装全过程(VMware)
  • 第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)
  • 【CTF】CTF竞赛介绍以及刷题网址
  • Springboot怎么优雅实现大文件的上传