Java 笔记 serialVersionUID

serialVersionUID 是用于序列化机制的一个 版本控制标识符,用于确保反序列化时类的兼容性。

当一个类实现了 Serializable 接口后,Java 会给这个类自动生成一个 唯一的标识符(serialVersionUID)。这个 ID 在序列化和反序列化之间对比,如果不一致,会导致反序列化失败,抛出异常:

java 复制代码
java.io.InvalidClassException: 类的 serialVersionUID 不匹配

若不定义,JVM 会自动生成一个 serialVersionUID,但生成规则依赖于:

  • 类名

  • 实现的接口

  • 方法和字段等结构细节

所以一旦你修改了类结构(比如加了一个字段),默认的 serialVersionUID 就变了,反序列化旧对象时就会报错。

✅ 生成方式(推荐工具生成)

在 IDE(如 IntelliJ IDEA 或 Eclipse)中:

  • 鼠标右键提示 → "Add serialVersionUID"

  • 自动生成如:

java 复制代码
private static final long serialVersionUID = 837456293846593845L;

✅ serialVersionUID 的使用场景总结

场景 是否需要定义 serialVersionUID 原因
类可能会序列化/反序列化 ✅ 建议手动定义 保证兼容性
类不会序列化 ❌ 可以不定义 没必要
序列化用于网络传输、缓存、持久化等 ✅ 强烈建议定义 防止版本不一致导致反序列化失败

写小说也写代码,左手架空世界,右手现实逻辑。

📚 欢迎来看博客,起点同笔名在写小说,欢迎来找我玩。

https://my.qidian.com/author/433910170/

相关推荐
码匠许师傅7 小时前
【C++ 面试真题】聊聊 volatile 和 mutable
开发语言·c++·面试
ChaHae-In7 小时前
MyBatis入门操作
java·mybatis
xcLeigh7 小时前
Go入门:短变量声明的陷阱与最佳实践
java·redis·golang·教程·变量
(Charon)8 小时前
【C++】线程安全队列(二):生产者消费者模型与 condition_variable 阻塞等待
c语言·开发语言·c++
青山木8 小时前
Hot 100 --- 最小栈
java·数据结构·算法·leetcode
疯狂打码的少年8 小时前
【数据结构】栈的应用:表达式求值(后缀表达式)
java·数据结构·笔记·算法
liwulin05068 小时前
【PYTHON】使用Selenium + ChromeDriver以及XPATH语法
开发语言·python·selenium
szephyr8 小时前
腾讯云 ADP 智能体的 Skills 版本回滚总是回到旧配置,是缓存没清还是版本管理没开?
java·缓存·腾讯云
JavaPub-rodert8 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
云烟成雨TD8 小时前
Micrometer 系列【39】链路追踪:入门案例 | 环境准备
java·云原生·链路追踪