为什么在反序列化期间从对象的类中删除变量不会引发异常?那么序列化中的“不兼容”更改意味着什么?我还根据Java 规范将类的字段从非静态更改为静态
不兼容。
为什么在反序列化期间从对象的类中删除变量不会引发异常?
因为它不应该。请参阅对象版本控制规范,#5.6.1:
"删除字段 - 如果一个类中的一个字段被删除,写入的流将不包含它的值。当流被更早的类读取时,该字段的值将设置为默认值,因为没有可用的值流。但是,此默认值可能会对早期版本履行其合同的能力产生不利影响。
和
“将非静态字段更改为静态或将非瞬态字段更改为瞬态 - 当依赖默认序列化时,此更改相当于从类中删除一个字段。此版本的类不会将该数据写入流,因此不会可以被早期版本的类读取。当删除一个字段时,早期版本的字段将被初始化为默认值,这可能会导致类以意想不到的方式失败。
没有关于抛出异常的内容。