有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么在扩展RuntimeException时需要serialVersionUID?

扩展RuntimeException时为什么需要SerialVersionId?RuntimeException是可序列化的类吗

public class DataNotFoundException extends RuntimeException {       
    /**
     * 
     */
    private static final long serialVersionUID = 1;

    public DataNotFoundException(String str)
    {
        super(str);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    异常类或实现Serializable的任何类都需要有SerialUID,以便在编译时序列化已执行的类,并且在重新编译时de-serialized将执行与正在执行de-serialized的序列化类版本相匹配的版本
    Serialisation的实现有以下原因

    1. 通过以下方式支持在不同虚拟机中运行的类的不同版本之间的双向通信:
      • 定义一种机制,允许JavaTM类读取由同一类的旧版本编写的流
      • 定义一种机制,允许JavaTM类写入要由同一类的较旧版本读取的流
      • 为持久性和RMI提供默认序列化
      • 在简单的情况下执行良好并生成紧凑的流,以便RMI可以使用序列化
      • 能够识别和加载与用于写入流的确切类相匹配的类
      • 对于无版本的类,保持较低的开销。 使用允许遍历流的流格式,而不必调用流中保存的对象的特定方法
  2. # 2 楼答案

    RuntimeException扩展了ExceptionException扩展了{}Throwable实现{}。所以DataNotFoundException也是Serializable