Java 为什么不建议使用try…catch块来处理未检查的异常;为什么只通过一些有条件的检查?

Java 为什么不建议使用try…catch块来处理未检查的异常;为什么只通过一些有条件的检查?,java,unchecked-exception,Java,Unchecked Exception,为什么不建议使用try…catch块来处理未检查的异常? 为什么我们只需要通过一些条件检查来避免它们?Java异常模型的一个基本限制是,如果一个方法抛出异常,它的调用方通常不可能知道它周围的环境。如果即将计算x%y的代码测试y是否为零,则它可以知道发生dividebyzero异常的确切情况,并适当处理该情况。如果通过捕获异常来处理该条件,则程序员可能会认为,当y为零时,试图计算x%y会导致异常,但也会捕获由于意外原因发生的除以零的异常(例如,调用一个方法,该方法应该对一个集合进行分区,但有一个错

为什么不建议使用try…catch块来处理未检查的异常?
为什么我们只需要通过一些条件检查来避免它们?

Java异常模型的一个基本限制是,如果一个方法抛出异常,它的调用方通常不可能知道它周围的环境。如果即将计算
x%y
的代码测试
y
是否为零,则它可以知道发生
dividebyzero异常的确切情况,并适当处理该情况。如果通过捕获异常来处理该条件,则程序员可能会认为,当
y
为零时,试图计算
x%y
会导致异常,但也会捕获由于意外原因发生的除以零的异常(例如,调用一个方法,该方法应该对一个集合进行分区,但有一个错误导致它试图将集合细分为零个片段)。在捕获异常时,无法指定仅在出于预期原因引发异常时才希望捕获该异常。实际上,已检查和未检查的异常都有相同的问题,但未检查的异常在意外情况下引发的情况更常见。

我不确定您的意思,但一般来说,异常处理比执行条件检查“成本”最高,而且通常是一个更易于阅读的控制流;因此,这可能就是您所指的方面?@AllanS.Hansen感谢您的回复。但我们仅通过try..catch blocks来处理检查过的异常,这是推荐的。但我无法理解这不是rec在未检查的异常情况下进行处理。理论上,未检查的异常是(假定为)“致命的”,通常不能以确保程序继续正确执行的方式进行容忍。这就是理论。