39

当您用类Exception(用于创建新的异常)扩展一个类时,您会收到一条警告,提示serialVersionUID。我知道serialVersionUID在序列化和反序列化过程中起着重要作用,但是当我的异常需要序列化时?任何人都可以给我一个我希望自定义异常类具有序列化和反序列化的实际案例吗?为什么我的异常类需要序列化?

回答

50

这是因为所有例外的根类,Throwable实现了Serializable接口。默认情况下,所有的异常都是可序列化的,这是一个语言设计决定,因为作者希望异常能够在没有任何特殊配置的情况下通过线路发送。

如果基类不是可序列化的,那么在远程方法失败的情况下,由于您不能控制内置的异常类型,您将难以明确地发生错误。

11

如果您的自定义异常曾用于分布式应用程序(使用RMI,Spring http-invoker等),并且可以从远程客户端调用的服务器方法抛出,那么必须将异常序列化穿过电线并去到客户端。

相关问题