我偶然发现了java序列化.我在许多文档和书中都读到静态和瞬态变量无法用Java序列化.我们声明serialVersionUid如下.
private static final long serialVersionUID = 1L;
如果静态变量未被序列化,那么在反序列化过程中我们经常会遇到异常.
java.io.InvalidClassException
其中提取了反序列化对象的serialVersionUID,并与加载的类的serialVersionUID进行比较.
据我所知,我认为如果静态变量无法序列化.这个例外毫无意义.我可能错了,因为我还在学习.
是否存在"java中的静态和瞬态变量无法序列化"的神话.请纠正我,我对这个概念一团糟.
Sat*_*tya 60
实例变量:这些变量是序列化的,因此在反序列化期间,我们将返回序列化状态.
静态变量:这些变量未被序列化,因此在反序列化期间,静态变量值将从类中加载.(将加载当前值.)
短暂的变量: transient变量是不会被序列化,所以反序列化过程的变量将与相应的默认值进行初始化(例如:为对象的null,int 0).
超类变量:如果超类也实现了Serializable接口,那么这些变量将被序列化,否则它将不会序列化超类变量.在反序列化时,JVM将在超类中运行默认构造函数并填充默认值.所有超类都会发生同样的事情.
JB *_*zet 48
serialVersionUID是序列化和反序列化过程使用的特殊静态变量,用于验证本地类是否与用于序列化对象的类兼容.它不仅仅是其他的静态变量,它们绝对不是序列化的.
当首先序列化类的对象时,将包含类名和序列版UID的类描述符写入流.当反序列化时,JVM会检查从流中读取的串行版本UID是否与本地类相同.如果它们不是,它甚至不会尝试反序列化对象,因为它知道类是不兼容的.
| 归档时间: | 
 | 
| 查看次数: | 41936 次 | 
| 最近记录: |