Java技术:serialVersionUID作用介绍

               

  1. serialVersionUID概念介绍

英文翻译的意思是序列化版本号。凡是实现Serializable接口的类都会有一个表示序列化版本标识符的静态变量。

  1. serialVersionUID的生成方式

默认的1L:比如:private static final long serialVersionUID = 1L; 。

根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段:

比如:      

private static final long serialVersionUID = 3959055215634785113L;

  1. serialVersionUID原理

当定义一个实体类中如果没有显式的定义一个名为“serialVersionUID”、类型为long的变量时,Java序列化机制会根据编译时的class自动生成一个serialVersionUID作为序列化版本比较,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID。比如,当我们编写一个Java类时,随着时间的推移,因为需求的改动,需要在该Java类中添加新的的字段,这个时候再反序列化时就会出现serialVersionUID不一致的情况,从而导致反序列化失败。可以通过在本地Java类中添加一个“serialVersionUID”变量,值保持不变,便可以进行序列化和反序列化。如果Java类没有显示指定serialVersionUID,JVM会自动生成一个。

4、serialVersionUID作用 

序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 

5、serialVersionUID注意事项

1.当实现java.io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID 。如果我们不希望通过编译来强制划分软件版本,即实现序列化接口的实体能够兼容先前版本中未作更改的类,就需要显式地定义一个名为serialVersionUID,类型为long的变量,不修改这个变量值的序列化实体都可以相互进行串行化和反串行化。 

2.记住应该总是在可序列化的类中包含这个字段,即使是在第一个类版本中,以便提醒自己这个字段的重要性。不要在未来的版本中改变这个字段值,除非你有意要改变类使其与旧的序列化对象不兼容。

3.如果你的类序列化到硬盘上面后,你更改了类别的field(增加或减少或改名),当你反序列化时,就会出现异常的,这样就会造成不兼容性的问题。但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize,这个可以避开不兼容性的问题。 

4.当我们的系统不太经常需要序列化类时,可以去掉这些警告,做如下设置:Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就消失了。但如果在开发大量需要序列化的类的时候,建议还原为原来的设置。这样可以保证系统的性能和健壮。

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务雪崩

假设存在如下调用链 而此时,Service A的流量波动很大,流量经常会突然性增加!那么在这种情况下,就算Service A能扛得住请求,Service B和Service C未必能扛得住这突发的请求。 此时,如果Service C因为抗不住…

华为的型号命名规则_华为交换机s2700系列命名规则

华为交换机s2700系列命名规则华为交换机s2700系列命名规则上一篇我们聊到S2700系列机型的命名规则方法。基于要满足不同用户的市场需求,S2700系列提供了多款机型。咱们就以S2700-26TP-PWR-EI、S2710-52P-SI-AC、S2700-52P-EI-AC以及S2700-9TP-SI为模板来讲解S2700系…

电脑技巧:Win10操作系统关闭这几个功能,可以大幅度提升电脑的运行速度

目录 一、禁用Cortana语音助手 二、关闭onedrive自动同步服务 三、关闭微软自带的Windows Search服务 四、关闭windows自动更新 五、清理缓存文件 六、减少不必要开机启动项 今天小编给大家介绍一下Win10操作系统需要关闭的几个功能,能让你的电脑飞速运转&#xff0…

硬件知识:视频分配器、画面分割器、矩阵、延长器相关知识介绍

目录 1、视频分配器 2、视频切换器 3、视频矩阵 4、画面分割器 5、延长器 你知道视频分配器,画面分割器,矩阵各自的作用都是什么吗?今天小编就为大家详细的介绍下它们各自的区别。 1、视频分配器 视频分配器是一种把一个源平均分配成多路视频…

mysql 交叉连接_MySQL教程77-CROSS JOIN 交叉连接

之间所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。在 MySQL 中,多表查询主要有交叉连接、内连接和外连接…

电脑常见的VGA、DVI、PS/2、USB等接口知识笔记

我们经常见到电脑和网络设备上都少不了VGA、DVI、PS/2、USB等常用接口,那些接口里面有多个针脚,他们每个针脚都有自己的用途,今天电脑学习小编就带大家一起看看这些接口神秘用途。 现在很多朋友们可能会遇到VGA线或HDMI线不够长,或…

数据库:MySQL、HBase、ElasticSearch三者对比

1、概念介绍 MySQL:关系型数据库,主要面向OLTP,支持事务,支持二级索引,支持sql,支持主从、Group Replication架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。 HBas…

SpringBoot集成Mybatis用法笔记

今天给大家整理SpringBoot集成Mybatis用法笔记。希望对大家能有所帮助&#xff01;搭建一个SpringBoot基础项目。具体可以参考SpringBoot:搭建第一个Web程序引入相关依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><ar…

网络知识:交换机中的半双工与全双工知识笔记

今天小编给大家分享一下交换机中半双工与全双工相关知识&#xff0c;希望对大家能有所帮助&#xff01; 早期的网络设备HUB&#xff08;集线器&#xff09;就是半双工&#xff0c;目前基本没有人用了&#xff0c;而现在用的SWITCH&#xff08;交换机&#xff09;就是全双工。 a…

硬件知识:U盘插入电脑没反应相关解决办法整理

目录 一、U盘可能被隐藏 二、USB端口被BIOS禁用 三、电脑的USB驱动可能有问题 今天小编给大家介绍一下U盘插入电脑没反应相应的解决方案&#xff0c;希望对大家能有所帮助&#xff01; 一、U盘可能被隐藏 首先换台电脑看看是不是U盘损坏的问题&#xff0c;如果不是&#xff0c;…

分享9个实用的电脑维修技巧,赶紧收藏吧

目录 01、电脑不能上网 02、电脑蓝屏 03、没有声音 04、没有画面 05、软件无法启动 06、显示器画面不能满屏显示 07、使用过程中自动关机 08、电脑不能开机 09、电脑花屏 今天给大家分享9个实用的电脑维修技巧&#xff0c;赶紧收藏吧&#xff01; 01、电脑不能上网 常见原因1&a…

自媒体资源:分享8个免版权视频素材网站

目录 01. 知鱼素材 2、 gaiamount 3、 lifeofvids 4、Coverr 5、stock footage 6、vidsplay 7、Pixabay 8、Pexels 今天小编就给大家分享一些免版权的视频素材网站&#xff0c;有需要的小伙伴赶紧欢迎收藏&#xff01; 01. 知鱼素材 https://sucai.zhiyu.art/video 共享协议可免…

win7 mysql msi_windows下的Mysql安装与基本使用(msi)

本文针对mysql5.6与5.5一、其他版本与安装方式1.msi(mysql5.7及以上版本参考&#xff1a;https://www.cnblogs.com/zjiacun/p/6653891.html)这里我们用msi吧&#xff0c;只是单纯练习的话&#xff0c;简单很多二、msi安装(5.5-5.6)1.点击安装文件&#xff0c;在出现的安装向导上…

java中split以“.“ 、“\“、“|”分隔

今天项目里遇到以"." 、"\"、“|”分割字符串&#xff0c;直接用"." 、"\"、“|”无法分割&#xff0c;因为"." 、"\"、“|”是特殊字符&#xff0c;需要转义&#xff0c;"\\." 、"\\\"、“\…

推荐这11款免费好用的 Mac 软件

目录 1、IINA —— 全能视频播放器 02、大拍档剪辑助手 03、Dozer 04、Cheatsheet 05、Spectacle 06、Amphetamine 07、Macs Fan Control 08、AdGuard 09、Keka 10、腾讯柠檬清理 11、Cold Turkey Blocker 1、IINA —— 全能视频播放器 对于Mac OS来说&#xff0c;IINA可以说是…

三角形

源代码&#xff1a;#include<cstdio> #include<map> #define LL long long#define INF 1000000000 using namespace std; map <double,LL> i; //这个STL差不多就是一个反类型数组。 double f[100001]; LL n,Num(0); LL C(LL N,LL M) //排列组合。 {if (N<…