serialVersionUID功用
来源:互联网 发布:金牛考勤软件3.0 编辑:程序博客网 时间:2024/04/28 23:41
建立类时常有"The serializable class GetPostServlet does not declare a static final serialVersionUID field of type
long"提示信息采用自动修复,Eclipse会自动加上:private static final long serialVersionUID = 1L;
serialVersionUID作用:
其实这个问题倒也不影响程序的运行,但是我看到Problems里面有警告就不舒服,同时也说明我们写的代码还是不规范。不怕,我们有互联网查查是怎么回事,具体的原因还就是和序列化中的这个serialVersionUID有关。
serialVersionUID 用来表明类的不同版本间的兼容性.如果你修改了此类, 要修改此值. 否则以前用老版本的类序列化的类恢复时会出错.
可以利用JDK的bin目录下的serialver.exe工具产生这个serialVersionUID
对于Test.class,执行命令: serialver Test
为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。否则,如果不显示定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。
不显示定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植。因为不同的编译器实现的该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,依然会有因类版本不兼容而无法正确反序列化的现象出现。
因为我做的系统不太会经常需要序列化类,所以为了去掉这些警告,做如下设置:
Window-Preferences-Java,如图所示,将serializable class without serialVersionUID的设置由warning改为Ignore。然后Eclipse会重新编译程序,那些警告信息也就会消失了。
小结:如果我们开发大量需要序列化的类的时候,我们最好还是还原为原来的设置。这样可以保证系统的性能和健壮。
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
可以随便写一个,在Eclipse中它替你生成一个,有两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;
一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:private static final long serialVersionUID = -8940196742313994740L;之类的。
当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义之。
在Eclipse中点击类中warning的图标一下,Eclipse就会自动给定两种生成的方式,如上面所述。如果不想定义它,在Eclipse的设置中也可以把它关掉的,设置如下:
Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==> Potential programming problems
将Serializable class without serialVersionUID的warning改成ignore即可。
如果你没有考虑到兼容性问题时,就把它关掉,不过有这个功能是好的,只要任何类别实现了Serializable这个接口的话,如果没有加入 serialVersionUID,Eclipse都会给你warning提示,这个serialVersionUID为了让该类别 Serializable向后兼容。
如果你的类Serialized存到硬盘上面后,可是后来你却更改了类别的field(增加或减少或改名),当你Deserialize时,就会出现Exception的,这样就会造成不兼容性的问题
- serialVersionUID功用
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- serialVersionUID
- SerialVersionUID
- Head First C#中文版 (page 4)
- C# 几种窗口淡入淡出效果代码
- java中的编码与解码
- ubuntu8.04下openGL运行环境的建立(运行实例)
- 同步备用服务器
- serialVersionUID功用
- 使用T-SQL脚本在SQL Server创建角色,并给角色赋予相应权限
- dhtml中集合與數組的問題
- 大型网站的架构设计问题----大型高并发高负载网站的系统架构
- 复杂事件处理(Complex Event Processing)--1. 基本概念:事件,事件关系,事件处理的简单抽象理解
- java 排序
- word文档保存的时候,就会出现“文件许可权错误,word 无法完成保存文件”的提示
- ubuntu内核更换,优化系统
- ASP函数大全