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

时间:2017-10-06 05:44:43

标签: java serialization runtimeexception serialversionuid

为什么在扩展RuntimeException时我们需要serialVersionUID? RuntimeException是一个可序列化的类吗?

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

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

3 个答案:

答案 0 :(得分:4)

RuntimeException延伸ExceptionException延伸ThrowableThrowable实施Serializable。因此DataNotFoundException也是Serializable

答案 1 :(得分:3)

是的,Throwables是Serializable。 Serializable意味着该类的对象可以转换为字节序列。使序列化异常意味着它可以在分布式应用程序的层之间通过网络传输。

答案 2 :(得分:0)

异常类或实现Serializable的任何类都需要具有SerialUID,以便在编译时已序列化的类以及在重新编译时de-serialized的类,JVM会进行版本匹配,即版本为de-serialized的序列化类的版本。 实施Serialisation的原因如下。

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