gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:54:24 24 4
gpt4 key购买 nike

我偶然发现了解 java 序列化。我在许多文档和书籍中读到静态和 transient 变量不能在 Java 中序列化。 我们声明一个serialVersionUid如下。

private static final long serialVersionUID = 1L;

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

java.io.InvalidClassException

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

据我所知,我认为如果静态变量不能被序列化。这个异常(exception)没有任何意义。我可能错了,因为我还在学习。

“java 中的静态变量和 transient 变量不能被序列化”是神话吗?请纠正我,我对这个概念一团糟。

最佳答案

  1. 实例变量:这些变量是序列化的,所以在反序列化过程中我们会取回序列化状态。

  2. 静态变量:这些变量没有被序列化,所以在反序列化过程中,静态变量的值将从类中加载。(当前值将被加载。)

  3. transient 变量: transient 变量未序列化,因此在反序列化期间,这些变量将使用相应的默认值初始化(例如:对于对象 null , int 0).

  4. 父类(super class)变量:如果父类(super class)也实现了Serializable接口(interface),那么这些变量将被序列化,否则它不会序列化父类(super class)变量。在反序列化时,JVM 将在父类(super class)中运行默认构造函数并填充默认值。所有父类(super class)都会发生同样的事情。

关于java - 静态变量是否在序列化过程中序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000975/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com