Java 为什么序列化过程需要访问第一个不可序列化超类的无参数构造函数?

Java 为什么序列化过程需要访问第一个不可序列化超类的无参数构造函数?,java,serialization,Java,Serialization,从 可序列化类必须执行以下操作: 实现java.io.Serializable接口 标识应可序列化的字段(使用serialPersistentFields成员显式声明它们可序列化,或使用transient关键字取消非序列化字段。) 可以访问其第一个非序列化超类的无参数构造函数 以上第三点背后的前提是什么 以上第三点背后的前提是什么 这样,不可序列化的基类就可以初始化为一个已知的状态,程序员可以在一定程度上控制该状态。这只是一个设计决策。但是那些不可序列化的类是如何初始化到已知状态的呢?谁在这里做

可序列化类必须执行以下操作:

  • 实现java.io.Serializable接口
  • 标识应可序列化的字段(使用serialPersistentFields成员显式声明它们可序列化,或使用transient关键字取消非序列化字段。)
  • 可以访问其第一个非序列化超类的无参数构造函数
  • 以上第三点背后的前提是什么

    以上第三点背后的前提是什么


    这样,不可序列化的基类就可以初始化为一个已知的状态,程序员可以在一定程度上控制该状态。这只是一个设计决策。

    但是那些不可序列化的类是如何初始化到已知状态的呢?谁在这里做这项工作?你能解释一下答案中程序员部分可以在某种程度上控制的部分吗。回答中的代码片段会很有帮助。@Geek最近的不可序列化基类的默认无参数构造函数正在这样做。你要问的那个。程序员可以“在某种程度上控制它”,如果他能将代码放入其中的话。当然这是显而易见的?但您在对upog回答的评论中写道,“默认构造函数不会‘将实例变量初始化为其默认值’。您可以通过编写带参数的空构造函数来替换它,并获得相同的效果”。。这是已知状态和默认状态之间的差异吗?这里的要点是(a)必须有一个用于调用序列化的默认无参数构造函数,以及(b)您可以显式编写自己的无参数构造函数,并让它执行任何您喜欢的操作。请参阅