实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

实现后如果你用的是工具的话会出来警告,他会提示你,可以自动生成private static final long serialVersionUID = 1L; 
为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义.   
在JDK中,可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID,如对于Test.class可执行如下命令:serialver Test。

这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。否则,如果不显式定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。

不显式定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植。因为不同的编译器实现该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,出现因类版本不兼容而无法正确反序列化的现象出现。 
当我们的系统不太经常需要序列化类时,可以去掉这些警告,做如下设置:Window-->Preferences-->Java,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就消失了。

最后的建议是,如果我们开发大量需要序列化的类的时候,我们最好还是还原为原来的设置。这样可以保证系统的性能和健壮。

关于serialVersionUID的解释

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

你可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。 
Eclipse提示The serializable class XXX does not declare a static final serialVersionUID field of type long 
那是Eclipse提供这个提示功能给你吧.
你点它warning的icon两下Eclipse就会自动给定.
如果你不喜欢,可以把它关掉,
windows -> preferences -> compiler -> Error/Warnings
-> Potential Programming problems
将Serializable class without serialVersionUID的warning改成ignore.

其实如果你没有考虑到兼容性问题时,那就把它关掉吧.
其实有这个功能是好的.
只要任何类别实作了Serializable这个介面,
如果没有加入serialVersionUID,Eclipse都会给你warning提示,
这个serialVersionUID为了让该类别Serializable後兼容.

考虑一下,如果今天你的类Serialized存到硬碟里,
可是後来你却更改了类别的field(增加或减少或改名).
当你Deserialize时,就会出现Exception.这样就会做成不兼容性的问题.

但当serialVersionUID相同时,它就会将不一样的field以type的预设值Deserialize.
这个可以避开不兼容性的问题.

异常状态:
The serializable class XXX does not declare a static final serialVersionUID field of type long

转载于:https://www.cnblogs.com/soundcode/p/6296515.html

定义serialVersionUID的作用与意义整理相关推荐

  1. 宏定义_do{...} while(0U)宏定义的作用和意义

    转黄工的一篇文章,do while ,这个在Linux 里面也是经常见到,即使不是Linux ,只要涉及 C 语言的宏定义,就会出现,发出来给大家了解下. 写在前面 很多初学者,以及有一定工作经验的朋 ...

  2. java 四字节uid,Java入门教程-序列化版本号serialVersionUID的作用

    原标题:Java入门教程-序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法 ...

  3. java_version干什么的_java类中serialVersionUID的作用及其使用

    实现Serializable接口的目的是为类可持久化,比如在网络传输或本地存储,为系统的分布和异构部署提供先决条件.若没有序列化,现在我们所熟悉的远程调用,对象数据库都不可能存在, serialVer ...

  4. java 序列化版本号_序列化版本号serialVersionUID的作用

    原标题:序列化版本号serialVersionUID的作用 Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象.序列化是Java中实现持久化存储的一种方法:为数据传输提供了 ...

  5. 数据分析的作用和意义?

    数据分析的作用和意义? 在当下数字化转型发展的大环境中,数据也成为企业商业成功与否的重要基础,如何利用好数据分析问题预测未来也成为更多企业面临的首要问题.而随时大数据的不断渗透,数据量和数据类型也越来 ...

  6. Android之?,@,@+代表的作用和意义

    Android之?,@,@+代表的作用和意义 文章链接:http://blog.csdn.net/qq_16628781/article/details/68942135 知识点 资源文件简介: @, ...

  7. 录音艺术与计算机音乐文化,录音艺术在高校音乐专业教学中的作用和意义

    曾荣 摘 要:声乐课程是高校音乐专业的一门基础型学科,传统声乐课程教学模式主要包括理论教学.声曲练习.歌曲演唱以及舞台表演等方法,而计算机技术的进步,为声乐课程教学模式的创新提供了良好契机,逐渐形成了 ...

  8. 插件的开放作用和意义

    Unity插件开发作用和意义 随着Unity游戏引擎越来越流行,用好Unity将直接影响到游戏前端的开发速度和质量,Unity插件开发正是用好的一个范畴. 那么什么是Unity插件呢? 可大可小,说来 ...

  9. 在企业运营管理中数据分析的重要作用和意义

    在公司的众多运营活动中,每天都会产生很多的数据,这些看似毫无有关的数据,通常可以具有深层次的紧密关系,关于公司的运营和发展策略的决议计划都会有十分重要的作用和意义.随着大数据时代的来临,数据剖析已经成 ...

最新文章

  1. Shell多线程操作及线程数控制实例
  2. bzoj4472: [Jsoi2015]salesman(树形dp)
  3. Redis failover过程
  4. 发送不同类型的ActivityFeed
  5. Android初始化本地数据库
  6. 基于java(springboot+mybatis)汽车信息管理系统设计和实现以及文档
  7. MSSQL备份及数据迁移
  8. mysql adodb_MySql AdoDB基本的函数
  9. 下载elasticsearch的jdbc包
  10. python基础词云制作——中国地图
  11. Vue实现百度离线地图(v2.0)
  12. 无线模块发送接收笔记
  13. Java实现八皇后算法
  14. android 4.4 一键root,手动一键root nexus 4 android 4.4
  15. Linux共享内存使用常见陷阱与分析
  16. tipask火车头采集器文章和提问发布模块|非免登录
  17. KONE-FLOW Vistor Key
  18. 1688按图搜索商品(拍立淘)获取数据的教程
  19. Java编程思想(六)
  20. Android学习之RecyclerView带刺的玫瑰

热门文章

  1. PHP复杂度,php 算法复杂度 时间复杂度 空间复杂度
  2. 外包网络推广公司浅析想保持稳定的SEO排名和流量,需要做什么呢?
  3. 网站推广——企业网站如何在网站推广中获取用户信任感?
  4. 网站关键词优化从这几方面下手效果会更好!
  5. 七天快排优化真的存在!
  6. 如何在网站建设时正确设置符合SEO优化的元素?
  7. mysql四个字符串类型_mysql的数据类型4---字符串类型
  8. gfnormal 域名 是阿里云的高防IP
  9. SpringAOP 相关知识点总结
  10. webstom新增vue模板