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/

相关推荐
ChampaignWolf8 分钟前
在 Eclipse 中使用 Tabnine
java·ide·eclipse
Deep-w8 分钟前
【MATLAB】基于MATLAB的图像加密传输平台【GUI+源码+项目说明】
开发语言·matlab·密码学
Evand J11 分钟前
【MATLAB集群控制导航7】多无人机三维编队轨迹规划仿真。RRT*+Catmull-Rom路径平滑+Frenet 编队保持。附MATLAB代码链接
开发语言·matlab·无人机
天问一22 分钟前
router路由类型和使用方法
开发语言·javascript·ecmascript
JAVA面经实录91727 分钟前
Java多线程并发高频面试100题(完整版·含答案·背诵版)
java·开发语言·面试
穗余29 分钟前
2026 AI x Web3 School共学营笔记-Day1
人工智能·笔记·web3
XiYang-DING30 分钟前
【Java EE】TCP—流量控制和拥塞控制
java·tcp/ip·java-ee
sheeta199830 分钟前
LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
笔记·算法·leetcode
无限进步_36 分钟前
C++异常机制:抛出、捕获与栈展开
开发语言·c++·安全
小白学大数据40 分钟前
深度探索:Python 爬虫实现豆瓣音乐全站采集
开发语言·爬虫·python·数据分析