【发布时间】:2021-06-02 18:09:29
【问题描述】:
我正在阅读 Java 中的已检查与未检查异常以及何时使用它们:
这是底线:如果可以合理地期望客户端从异常中恢复,则将其设为已检查异常。如果客户端无法从异常中恢复,请将其设为未经检查的异常。
客户端无法恢复的一个例子是除以零,他们可以恢复的东西是 FileNotFound 异常。我还没有看到区别。为什么你可以捕获一个并记录错误,但不能捕获另一个并记录错误?是什么使某些东西可以合理地恢复?您不能在所有情况下发现错误(从而恢复)吗?
【问题讨论】:
-
这可能是基于意见的,就像整个已检查/未检查的异常设计一样。我的观点是,这种区别本身就是 Java 开发人员需要担心的一件大事。如果没有 Java 中的检查异常,编码不会更糟......相反......
-
最初的想法是,检查异常是针对调用者应该知道如何处理的失败模式(例如,网络失败;重试),而未经检查的异常表示实际的软件错误(未能验证输入)。
-
这是一个很好的问题,但它是一个设计问题/哲学问题。例如,.NET 决定不使用检查异常——因为在大多数情况下,您通常需要在有意义的位置捕获异常,以便应用程序可以继续运行。见Why are Exceptions not Checked in .NET。
标签: java exception checked-exceptions unchecked-exception