当前位置: 首页 > 面试题库 >

Java静态序列化规则?

时才俊
2023-03-14
问题内容

我正在使用一些静态方法和字段进行保存状态序列化。我可能已经发誓,尽管序列化和static造成了混乱。我应该使所有静电瞬变吗?并扩大通话会恢复正常的静态吗?


问题答案:

statics是隐式的transient,因此您不需要这样声明它们。

序列化用于序列化 实例 ,而不是
static字段(方法是不相关的,因为它们是类定义的一部分,所以它们不被序列化)将被重新初始化为加载类时它们设置的任何值。

如果您具有可变static字段,则对该值所做的更改将丢失。



 类似资料:
  • 问题内容: 静态变量的值如何在序列化过程中持久化(如果完全持久化)。我在栈上读过类似的问题,它说静态变量本质上是瞬态的,即它们的状态或当前值未序列化。 我只是做一个非常简单的示例,我将一个类序列化并保存到文件中,然后再次从文件中重构该类。令人惊讶的是,我发现静态变量的值在序列化发生时和发生时都被保存了。 这是怎么发生的。这是因为类模板及其实例信息是在序列化期间保存的。这是代码片段- 这是我的主班

  • 问题内容: 如果我尝试序列化静态属性会怎样? 谢谢 问题答案: 从这篇文章: 提示1:处理静态变量 Java类通常在静态类变量中包含一些全局相关的值。我们不会进入有关全局变量是否适当的争论的悠久历史- 只能说程序员继续发现它们有用,而纯粹主义者建议的替代方案并不总是可行的。 对于声明时初始化的静态变量,序列化不会出现任何特殊问题。第一次使用该类时,相关变量将设置为正确的值。 某些静态无法通过这种方

  • 问题内容: 我正在尝试发现初始化发生的顺序,或者更确切地说,为什么要按此顺序进行初始化的原因。给定代码: 输出: 但是,将的声明移动到初始化块之前会产生: 而且我完全不知道为什么会以这种顺序发生。此外,如果我在的声明中消除了关键字,则init块和构造函数均不会触发。谁能帮我这个忙吗? 问题答案: 我认为您只是缺少JLS的12.4.2节,其中包括: 接下来,以文本顺序执行类的类变量初始化器和静态初始

  • 问题内容: 如标题所示,两者之间到底有什么区别 和 除了结构以外,还有什么重要区别吗? 问题答案: 对于您的示例,没有区别。但是如您所见, 只能接受一个表达式来初始化变量。但是,在静态初始化器(JLS 8.7)中,可以执行任意数量的语句。例如,可以这样做: 对于您的示例,显然不需要这样做,但是变量的初始化可能不仅仅使用表达式,甚至可能包含许多语句,因此Java制作了静态初始化器。

  • 问题内容: 我偶然了解了Java序列化。我读过许多文档和书籍,其中静态变量和瞬态变量无法在Java中序列化。我们声明一个serialVersionUid如下。 如果静态变量未序列化,那么在反序列化过程中我们经常会遇到异常。 其中从反序列化对象中提取serialVersionUID并将其与已加载类的serialVersionUID进行比较。 据我所知,我认为如果静态变量不能序列化。毫无例外。我可能仍

  • 我无意中理解了java序列化。我在许多文档和书籍中读到静态和瞬态变量不能在Java中序列化。我们声明一个serialVersionUid,如下所示。 如果一个静态变量没有序列化,那么在反序列化过程中我们经常会遇到异常。 其中从反序列化对象中提取serialVersionUID并将其与加载类的serialVersionUID进行比较。 据我所知,我认为如果静态变量不能序列化。那例外是没有意义的。我可