您如何判断是不是使异常检查或未检查?
Posted
技术标签:
【中文标题】您如何判断是不是使异常检查或未检查?【英文标题】:How do you judge whether to make an exception checked or unchecked?您如何判断是否使异常检查或未检查? 【发布时间】:2021-06-02 18:09:29 【问题描述】:我正在阅读 Java 中的已检查与未检查异常以及何时使用它们:
这是底线:如果可以合理地期望客户端从异常中恢复,则将其设为已检查异常。如果客户端无法从异常中恢复,请将其设为未经检查的异常。
客户端无法恢复的一个例子是除以零,他们可以恢复的东西是 FileNotFound 异常。我还没有看到区别。为什么你可以捕获一个并记录错误,但不能捕获另一个并记录错误?是什么使某些东西可以合理地恢复?您不能在所有情况下发现错误(从而恢复)吗?
【问题讨论】:
这可能是基于意见的,就像整个已检查/未检查的异常设计一样。我的观点是,这种区别本身就是 Java 开发人员需要担心的一件大事。如果没有 Java 中的检查异常,编码不会更糟......相反...... 最初的想法是,检查异常是针对调用者应该知道如何处理的失败模式(例如,网络失败;重试),而未经检查的异常表示实际的软件错误(未能验证输入)。 这是一个很好的问题,但它是一个设计问题/哲学问题。例如,.NET 决定不使用检查异常——因为在大多数情况下,您通常需要在有意义的位置捕获异常,以便应用程序可以继续运行。见Why are Exceptions not Checked in .NET。 【参考方案1】:引用的意思是这样的:如果客户端代码不能从问题中恢复,它需要让异常传播到更高层。如果为此使用受检异常,则需要通过所有调用层声明受检异常而没有任何好处。
换个说法:如果异常预计会通过层传播,请取消选中。仅检查调用者是否可以对其执行某些操作。
【讨论】:
【参考方案2】:当检查异常并发生异常时,很容易排查异常原因。如果我们不使用受检异常,就很难找出异常的原因。检查的异常给出了预期异常的概念。
【讨论】:
这不是引用的意思。以上是关于您如何判断是不是使异常检查或未检查?的主要内容,如果未能解决你的问题,请参考以下文章
Nightwatchjs:如何在不创建错误/失败/异常的情况下检查元素是不是存在