如何判断异常是checked还是unchecked?

How do you judge whether to make an exception checked or unchecked?

我在 Java 中阅读了有关已检查异常与未检查异常以及何时使用它们的信息:

Here's the bottom line: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.

不能期望客户端从中恢复的示例是除以零,其中他们可以从中恢复的是 FileNotFound 异常。不过我还没有看到区别。为什么可以捕获一个并记录错误,而不能捕获另一个并记录错误?是什么让某些东西可以合理地恢复?你不能在所有情况下捕获错误(从而恢复)吗?

当检查异常并出现异常时,很容易排查异常原因。如果不使用checked exception,就很难找出异常的原因。已检查的异常给出了预期异常的概念。

引用的意思是:如果客户端代码无法从问题中恢复,则需要让异常传播到更高层。如果为此使用检查异常,则需要通过所有调用层声明检查异常,而没有任何好处。

换句话说:如果异常预计会通过层传播,请取消选中它。只检查调用者是否真的可以做些什么。