为什么对象序列化要定义serialVersionUID

对于实现了java.io.Serializable接口的实体类来说,往往都会手动声明serialVersionUID,因为只要你实现了序列化,java自己就会默认给实体类加上一个serialVersionUID。

java默认添加的serialVersionUID是会根据实体类的成员(成员变量,成员方法)变化而变化的。

为什么要显示声明一个serialVersionUID呢?

当我们把实体类序列化到本地后,如果实体类的成员发生了变化,默认添加的serialVersionUID就会发生变化。此时硬盘上序列化对象的serialVersionUID与实体类中的serialVersionUID对不上,就会反序列化失败爆出异常:

Exception in thread “main” java.io.InvalidClassException: Person; local class incompatible: stream classdesc serialVersionUID = 8383901821872620925, local class serialVersionUID = -763618247875550322 

所以,通常对于实现了SerialVersionUID接口的实体类来说,都会手动声明serialVersionUID。

private static final long serialVersionUID = 1L;

通过上述代码即可实现。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

如何证明Java多线程中的成员变量的值是互不可见的

前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义,特点和联系,其中在Java多线程里面有一个数据不可见的问题而我们知道使用volatile可以解决,...

1094
来自专栏十月梦想

ES6基础语法之set

444
来自专栏我的博客

桶排序

桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归...

3246
来自专栏王磊的博客

javascript中Array的操作

concat(组合数组) join(数组转字符串) pop(删除最后一个元素) shift(删除第一个元素) push(在数组尾部添加新元素) unshift(...

2668
来自专栏日常分享

Spring 学习笔记(四)—— XML配置依赖注入

  依赖注入(DI)与控制反转(IoC)是同一个概念,都是为了处理对象间的依赖关系。

602
来自专栏用户2442861的专栏

java+内存分配及变量存储位置的区别

Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细...

351
来自专栏禁心尽力

Redis之数据类型大全

一:String类型 1、set方法:设置key对应的值为string类型的value,如果该key已经存在,则覆盖key对应的value值。所以在redis中...

8637
来自专栏青枫的专栏

java基础学习_集合类01_对象数组、集合Collection接口、集合List接口_day15总结

============================================================================= ==...

531
来自专栏前端知识分享

第38天:运算符、字符串对象常用方法

console.log(0||1);   1 console.log(1||0);   1 console.log(1||5);   1 console.log...

622
来自专栏小二的折腾日记

day5(面向对象2)

该类不是算是IO体系中子类,而是继承自Object。 但是它是IO包中的成员,因为它具备读和写功能。颞部封装了一个数组,而且通过指针对数组的元素进行操作。 可以...

451

扫码关注云+社区