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

这个问题在这里已经有了答案:

  • 什么是serialVersionUID,为什么我应该使用它? 21个答案

  • 为什么serialVersionUID必须声明为static,final和long类型?
  • 因为规范是这样说的。

  • serialVersionUID是否必须是唯一的?
  • 不可以。它只区分你班级的不同版本(例如,在不同的时间点编译)。 如果你正在编写一个新的类,你可以设置serialVersionUID = 1L; 无任何问题。

  • 当两个或更多类包含相同的serialVersionUID时会发生什么? 在这种情况下,serialVersionUID将如何用于反序列化字节数组?
  • 两个或多个类可以声明相同的serialVersionUID。 实际的线路格式包含完全限定的类名,所以不存在歧义。

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


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

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

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

    它不一定是唯一的。 如果一个类的两个版本具有相同的serialversionUID,这意味着该类没有任何影响序列化的更改,则这两个版本的类可以接受相同的序列化格式。

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

    链接地址: http://www.djcxy.com/p/4083.html

    上一篇: Why serialVersionUID in java must be static, final, and of type long?

    下一篇: why Java declared serialVersionUID in Exception and Throwable class?