为什么java中的serialVersionUID必须是static,final和long类型?

时间:2016-07-06 18:48:33

标签: java serialization static final serialversionuid

  1. 为什么serialVersionUID必须声明为static,final和long变量类型​​?
  2. 此serialVersionUID是否唯一?
  3. 当两个或多个类包含相同的serialVersionUID时会发生什么?在这种情况下,这个versionUID如何用于反序列化字节数组?

2 个答案:

答案 0 :(得分:1)

它是静态的,因为它属于类,而不属于实例。

这是最终的,因为它没有改变(对于那个版本的类)。它只会在有人对影响序列化方式的类进行更改时才会更改。

这很长,因为数据类型易于序列化,适合紧凑的空间,并且具有比任何人可能需要的更多的值。

它不一定是唯一的。如果一个类的两个版本具有相同的serialversionUID,这意味着类不会影响它的序列化方式,那么这两个版本的类可以接受相同的序列化格式。

如果两个类具有相同的serialVersionUID并不重要,它不在类之间使用,它仅用于检查类的序列化版本是否与该类的类兼容。

答案 1 :(得分:1)

  
      
  1. 为什么必须将serialVersionUID声明为static,final和long类型?
  2.   

因为the specification这样说。

  
      
  1. serialVersionUID需要是唯一的吗?
  2.   

没有。它仅区分您的班级的不同版本(例如,在不同时间点编译)。如果您正在撰写新课程,则可以毫无问题地设置serialVersionUID = 1L;

  
      
  1. 当两个或多个类包含相同的serialVersionUID时会发生什么?在这种情况下,serialVersionUID如何用于反序列化字节数组?
  2.   

两个或多个类可以声明相同的serialVersionUID。实际的有线格式包含完全限定的类名,因此没有歧义。

如果正在加载的数据中的serialVersionUID与您的类的serialVersionUID不匹配,则会抛出InvalidClassException