静态变量是否在序列化过程中序列化

问题描述

serialVersionUID是序列化和反序列化过程使用的 静态变量,用于验证本地类与用于序列化对象的类兼容。它不仅是静态变量,而且不像其他静态变量那样必须序列化。

一个类的对象第一次被序列化时,一个包含了类名和序列号UID的类描述符被写入流中。反序列化时,JVM将检查从流中读取的串行版本UID是否与本地类之一相同。如果不是,它们甚至不会尝试反序列化对象,因为它知道类是不兼容的。

解决方法

我偶然了解了Java序列化。我读过许多文档和书籍,其中静态变量和瞬态变量无法在Java中序列化。我们声明一个serialVersionUid如下。

private static final long serialVersionUID = 1L;

如果静态变量未序列化,那么在反序列化过程中我们经常会遇到异常。

java.io.InvalidClassException

其中从反序列化对象中提取serialVersionUID并将其与已加载类的serialVersionUID进行比较。

据我所知,我认为如果静态变量不能序列化。毫无例外。我可能仍在学习,所以可能是错的。

“无法序列化Java中的静态变量和瞬态变量”是一个神话。请纠正我,我对这个概念一团糟。