在Java文档中,我看到了定义
" 如果可以合理地期望客户端从异常中恢复,则将其设置为已检查的异常.如果客户端无法执行任何操作以从异常中恢复,请将其设置为未经检查的异常 "
我不清楚"恢复"的概念,这意味着什么?
而且,基于这个定义,为什么NumberFormatException无法恢复?我认为当发生此异常时,我们可以要求用户提供其他有效字符串来继续该程序.那是对的吗?
如果发生错误,开发人员无法合理地从中恢复,应该是Error例如VerifyError或NoMuchMethodError.如果出现这种情况我认为应该是不可能的,我使用AssertionError
如果发生错误的开发人员可以从中恢复,尽管大多数开发人员不太可能知道如何处理异常,请使用a,RuntimeException因为这不会强制开发人员编写处理代码.
如果将错误传递给调用者进行处理,即使大多数开发人员不知道如何从异常中恢复,即使他们这样做,也可能发现很难从该异常中恢复,可以使用已检查的异常.
你也可以创建一个Throwable或者一个也被检查过的直接子类,但是我只使用它作为打印堆栈跟踪的简单方法,即清楚它并不是真正的错误.我建议避免抛出诸如Throwable,因为它令人困惑并且不太可能正确处理.
在我们的代码库中,我们可能会说我们有效地使用Exception,并且在许多情况下写入调用者和被调用者,这是最有可能以有用的方式传递异常的机会.从来没有,通过后备恢复仅占我们catch案例的19%,而"信号"占6%的案例(A"信号"在极少数情况下从调用堆栈深处传递一个检查异常)
总之,我们只设法以我认为检查异常的方式处理和恢复大约25%的异常/错误.我认为这是一个有价值的25%,但如果它更高,我会更高兴.
对于完整的帖子讨论我们处理异常的不同方式. https://vanilla-java.github.io/2016/06/21/Reviewing-Exception-Handling.html