8.5 为什么我的异常类需要序列化? | Java Debug 笔记

192 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:为什么我的异常类需要序列化?

当您使用Exception类扩展一个类(用于创建新的异常)时,会收到警告,提示您有一个serialVersionUID。我知道这serialVersionUID在序列化和反序列化过程中起着重要的作用,但是何时需要对我的Exception进行序列化?谁能给我一个实际的案例,让我的自定义异常类具有序列化和反序列化?

回答1:

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

如果基类不可序列化,那么在远程方法失败的情况下,您将很难传递确切的错误信息,因为您无法控制内置的异常类型。

回答2: 如果您的自定义异常曾经在分布式应用程序中使用过(使用RMI,Spring http-invoker等),并且可以从远程客户端调用的服务器方法中抛出,则必须将异常序列化以跨越网络 然后去找客户端。

回答3:

您唯一的选择是为定义的每种Exception类型定义serialVersionUID(IDE可以为您生成),或者禁止显示警告。

本文翻译至Stack OverFlow:stackoverflow.com/questions/7…