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及串口基础知识硬件:断路器、接触器、继电器基础知识

Java技术:serialVersionUID作用介绍相关推荐

  1. java虚拟作用机的作用,java虚拟机及其作用介绍

    Java,是于1995年5月被推出的Java程序设计语言和Java平台的总称.那么java虚拟机又是什么,有什么作用,感兴趣的网友们跟着小编继续往下了解吧! java虚拟机 什么是java虚拟机 Ja ...

  2. java原子变量的作用_AtomicInteger原子类的作用介绍(代码示例)

    本篇文章给大家带来的内容是关于AtomicInteger原子类的作用介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. AtomicInteger 原子类的作用 多线程操 ...

  3. java技术及ssh框架和jsp技术的介绍 外文文献及翻译_java技术及ssh框架和jsp技术的介绍 外文文献及翻译.doc...

    java技术及ssh框架和jsp技术的介绍 外文文献及翻译.doc 还剩 34页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保 ...

  4. core java文献翻译_外文翻译--Java技术介绍(适用于毕业论文外文翻译+中英文对照).doc...

    毕业设计(论文)外文资料翻译 学 院: 信息工程学院 专 业: 计算机科学与技术 姓 名: XXXXXXXXX 学 号: XXXXXXXXX 外文出处: Cay s.Horstmann Core Ja ...

  5. java技术及ssh框架和jsp技术的介绍 外文文献及翻译_外文翻译 java技术及ssh框架和jsp技术的介绍 jsp程序.docx...

    外文翻译 java技术及ssh框架和jsp技术的介绍 jsp程序.docx 未苹炽浑餐胚北止提妹抑知苦芦绎斩军档阮磊记在千充浑鱼判餐趾北蜘刷知宠仑涩雍柱诡卞翼前细鞍音裤冯站投凝烟葬舜技绪秽崇踊鞋雍膊庸 ...

  6. java基础总结-java技术栈快速复习

    java基础 java基础概念 java概述和语言背景 java语言是没有sun公司(Stanford University Network:斯坦福大学网络)在1995年推出的计算机语言 java之父 ...

  7. java技术全掌握了_你必须掌握的 21 个 Java 核心技术!

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE ...

  8. Tomcat系列之Java技术详解

    一.概述 1.前言 在前面几篇博客中,我们和大家说了负载均衡器服务器.Web服务器.反向代理服务器.缓存服务器,从这篇博客开始我们和大家说说应用程序服务器,对于上述内容不了解的博友可以去参考一下我们前 ...

  9. JAVA技术周刊第一期:关于JVM你了解多少?看这篇文章就够了!

    简介:Java技术周刊正式上线,最新的Java技术与动态.预告活动.最热问答.直播教程等沉淀,订阅"JAVA开发者"技术圈获取更多干货内容! JAVA是世界各地开发者使用最多的编程 ...

最新文章

  1. 零基础参加java培训主要学什么
  2. Yabbly:让经验缔结因果
  3. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
  4. python 波动率_旧文:历史波动率的计算 (Python)
  5. Java面向对象编程篇1——类与对象
  6. cityengine导出fbx
  7. tidb-analyze
  8. C语言 || 递归 || 求第n个人的年龄
  9. 抽象类和抽象方法详解
  10. 重写equals()方法
  11. Android GMS (谷歌移动服务)
  12. javaspringboot面试题,java面试问职业规划
  13. Arduino与Proteus仿真实例-L298N驱动直流电机仿真
  14. 8086CPU结构与功能
  15. 财务软件哪个好?便宜好用的财务软件有哪些?
  16. PostgreSQL备机checkpoint
  17. Matlab多项式求值(2)(roots和poly的使用)
  18. 高德地图坐标转换为具体地址
  19. 盘点:2012年微博引爆的十大热点(组图)
  20. mysql 字段类型详解

热门文章

  1. 有道智能学习灯 初体验
  2. VC的文件路径为什么要用双斜杠
  3. DEV C++如何不需要通过建项目可以调试程序
  4. 计算机应用基础分析与报告,y计算机应用基础出题分析报告.doc
  5. oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6
  6. python idle 清屏问题的解决
  7. lua 从一串数字中取出偶数位的数字_为什么JavaScript中 0.1 0.2 不等于0.3?
  8. 学习Python中用numpy与matplotlib遇到的一些数学函数与函数的绘图
  9. combox 增加请选择_本命佛怎么请?
  10. 中文TeX的编辑环境推荐