黑马程序员技术交流社区

标题: serialVersionUID检查是起什么用的,求解。 [打印本页]

作者: Kael    时间: 2014-5-11 16:29
标题: serialVersionUID检查是起什么用的,求解。
  1. package exception;

  2. //报感叹号The serializable class MinusException does not declare a static final serialVersionUID field of type long
  3. class MinusException extends RuntimeException {
  4.         MinusException() {
  5.         }

  6.         MinusException(String msg) {
  7.                 super(msg);
  8.         }
  9. }

  10. class Demo {
  11.         public int method(int[] arr, int index) {
  12.                 if (index < 0) {
  13.                         throw new MinusException();
  14.                 }
  15.                 return arr[index];
  16.         }
  17. }

  18. public class ArrayIndexException {

  19.         public static void main(String[] args) {
  20.                 int[] arr = new int[3];
  21.                 Demo d = new Demo();
  22.                 d.method(arr, -20);

  23.         }

  24. }
复制代码

作者: 小周务商    时间: 2014-5-11 17:04
相当于给Class文件指定一个ID标识。

作者: Kael    时间: 2014-5-11 18:34
小周务商 发表于 2014-5-11 17:04
相当于给Class文件指定一个ID标识。

意思是在这个类为什么要给标识。其他类不用。
作者: 小周务商    时间: 2014-5-12 00:04
Kael 发表于 2014-5-11 18:34
意思是在这个类为什么要给标识。其他类不用。

简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)

你学到序列流的时候就应该知道的吧。比较读取配置文件的时候。
作者: 嗯√低调〆    时间: 2014-5-12 16:24
楼上说的对啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2