我们在IDE里编写Java项目时常常会遇到这样的警告:
引用
The serializable class ** does not declare a static final serialVersionUID field of type long
一个类或者其父类如果实现java.io.Serializable接口,并且不提供serialVersionUID值就会出现以上的warning。
JavaAPI上的一些解释:
如果一个被序列化的类没有显式声明的serialVersionUID,则程序在运行时将会计算这个类的默认的serialVersionUID值(基于类的信息)。不过在JavaAPI文档中,强烈建议将所有被序列化的类显式声明一个serialVersionUID值,因为默认的serialVersionUID的计算可能会取决于编译器实现,从而导致在反序列化过程中发生InvalidClassExceptions异常。
原文:
引用
If a serializable class does not explicitly declare a serialVersionUID, then the serialization runtime will calculate a default serialVersionUID value for that class based on various aspects of the class, as described in the Java(TM) Object Serialization Specification. However, it is strongly recommended that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected InvalidClassExceptions during deserialization. Therefore, to guarantee a consistent serialVersionUID value across different java compiler implementations, a serializable class must declare an explicit serialVersionUID value. It is also strongly advised that explicit serialVersionUID declarations use the private modifier where possible, since such declarations apply only to the immediately declaring class--serialVersionUID fields are not useful as inherited members.
解决的办法:
1,使用IDE根据对象的域值自动生成serialVersionUID(eclipse单击警告图标进行操作);
2,也可以使用默认的serialVersionUID值即:
private static final long serialVersionUID = 1L;
知识补充:
Java中对象序列化的主要作用:
- 在远程方法调用(RMI)中,它使存活于其它计算机上的对象使用起来就像是存活于本机一样。当向远程对象发送消息时,需要通过序列化来传输参数和返回值。
- 使用一个Bean时,一般是在设计阶段对它的状态信息进行配置。这种状态信息必须保存下来,并在程序启动时进行后期恢复,这个具体过程就由对象序列化来完成。
分享到:
相关推荐
Java中serialVersionUID的解释,对于版本的说明解释问题
以下是对Java中的serialVersionUID进行了全面的分析介绍。需要的朋友可以过来参考下
主要介绍了java类中serialVersionUID的作用及其使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
NULL 博文链接:https://jnh.iteye.com/blog/1300193
三期第一张IO笔记 6
序列化版本号serialVersionUID的作用_动力节点Java学院整理.
在 Java 中,当一个类实现了java.io.Serializable接口时,编译器会提示一个黄色的警告,因为该类没有提供 serialVersionUID 字段。serialVersionUID 是一个私有静态常量,用于标识类的版本号。在序列化和反序列化...
主要介绍了java序列化和serialVersionUID的使用方法实例的相关资料,这里说明很详细的使用方法让你彻底学会,需要的朋友可以参考下
Java 中使用 List 遇到黄色警告图标如何去除 Java 中使用 List 时出现黄色警告图标的原因是由于没有使用泛型,导致编译器无法确定 List 中保存的对象类型。解决方法是使用泛型,例如 `List<String> list = new ...
614.612.JAVA基础教程_IO流与网络编程-serialVersionUID的理解(614).rar
private static final long serialVersionUID = 1L; private JButton browseBtn; private JButton histogramBtn; private JButton compareBtn; private Dimension mySize; // image operator private ...
全面解析了java中serialVersionUID的作用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
private static final long serialVersionUID = 1L; private String filename; @SuppressWarnings("rawtypes") public String export() throws Exception { String templateFile = "18.xls"; // String sql...
Java 对象串行化编程是 Java 语言中的一种重要概念,它允许开发者将 Java 对象转换为字节流,以便在网络上传输或存储在文件中。对象串行化的优点是可以将复杂的对象结构转换为简单的字节流,从而实现对象的持久化和...
Java序列化和反序列化是Java虚拟机中的一种重要机制,它们可以将Java对象转换为二进制数据,然后将其保存到磁盘中或通过网络传输到其他机器上。今天,我们将深入理解Java虚拟机-Java内存区域透彻分析,探讨序列化和...
阿里巴巴开发手册,(四)OOP 规约,第 13 条解释如下: 【强制】序列化类新增属性时,请...首先我们需要了解一下序列化,我们可以简单了理解序列化就是把 Java 对象转换成另一种形态的数据,这种形态的数据可以用于
private static final long serialVersionUID = 2568625249670479556L; GamePanel mp=null; public static final int AREAWIDTH=400; public static final int AREAHEIGHT=300; public static void main(String...
private static final long serialVersionUID = 7025768684443110109L; public static void main(String[] args) { new TT().getFilePathName(); } public String getFilePathName() { TreeMap,File> ...
java中堆和栈的区别? Java 8 发布的重要特性是什么? 什么是 JVM,它是否独立于平台? 什么是 JIT 编译器? Java中的类加载器是什么? 什么是不同类型的类加载器? Java Compiler 存储在 JDK、JRE 还是 JVM 中? ...
private static final long serialVersionUID = 1L; JPanel panel = new JPanel(new BorderLayout()); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(new GridLayout(7, 7)); JPanel panel3 = new...