当前位置: 首页 > 面试题库 >

为什么Spring只处理未经检查的异常

籍星汉
2023-03-14
问题内容

我想知道为什么spring只处理未检查的异常.....谁能解释这背后的原因是什么。

Spring使用的任何设计模式都可以避免检查异常?


问题答案:

Spring使用的任何设计模式都可以避免检查异常?

不是设计模式,而是 异常处理的最佳实践

考虑下面的代码:

public void consumeAndForgetAllExceptions(){
    try {
        ...some code that throws exceptions
    } catch (Exception ex){
        ex.printStacktrace();
    }
}

上面的代码有什么问题?

引发异常后,将暂停正常程序执行,并将控制权转移到catch块。catch块捕获异常并抑制它。在catch块之后继续执行程序,好像什么也没发生。

接下来呢?

public void someMethod() throws Exception{
}

这种方法是空白的。它没有任何代码。 空白方法如何引发异常? Java不会阻止您这样做。

我想知道为什么spring只处理未检查的异常?

我个人更喜欢在throws原因中声明的未经检查的异常。当我对异常不感兴趣时​​,我讨厌不得不捕捉它们。我同意规范需要更多的异常类型,但是我不同意应检查它们。大多数框架都依赖于未经检查的异常,而不仅仅是Spring框架。

设计API的最佳做法

  • 如果客户端可以采取其他措施从异常中恢复,请使其成为 选中的异常
  • 如果客户端无法做任何有用的事情,请 取消选中异常 。有用的意思是,我要采取措施从异常中恢复,而不仅仅是记录异常。

Java的API有许多未检查异常,如
NullPointerExceptionIllegalArgumentExceptionIllegalStateException。我更喜欢使用Java提供的标准异常,而不是创建自己的标准异常。它们使我的代码易于理解,并避免增加代码的内存占用量。

也可以看看:

  • 未经检查的异常
  • 异常处理的最佳实践


 类似资料:
  • 问题内容: 通常,如果有任何类extends ,它将成为检查异常。还扩展了Exception。那么它是如何? 难道他们在这种特殊情况下会在 编译器中 自定义检查? 编辑: 我对已 检查的v / s未检查的异常 以及它们的优缺点等有适当的了解。我不接受它们之间的区别。 问题答案: 在规范的第11.1.1节中有明确规定: 及其所有子类共同是 运行时异常类 。 在 未经检查的异常类 是运行时异常类和错误

  • 为什么重写方法可以在java中抛出未经检查的异常? 为什么重写方法不能抛出比重写方法更广泛的异常?这不是我的问题。我只是想知道为什么重写方法可以抛出未检查的异常,而不能抛出已检查的异常。

  • 我不明白为什么我收到以下代码的警告: 未选中对<code>isAssignableFrom(类)的调用 当我使用< code>isInstance方法时(根据我的理解,它提供相同的结果),我没有得到警告:

  • 我有一些代码抛出一个检查异常。我想在lambda中调用该代码,以便从另一个映射创建一个映射: 其中是引发异常的代码: 现在编译器肯定会抱怨没有处理异常。所以我用一个来包围它,看起来很难看: 因为我们需要返回-case中的内容。然而,在这种例外情况下,返回任何内容都没有多大意义,这就是为什么我实际上不想在该级别处理异常。难道我不能在我创建lambda的调用代码中处理异常吗?所以说只是上面一层? 但这

  • 主要内容:Python语法错误,Python运行时错误开发人员在编写程序时,难免会遇到错误,有的是编写人员疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。 总的来说,编写程序时遇到的错误可大致分为 2 类,分别为 语法错误和 运行时错误。 Python语法错误 语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解释器在解析时就会报出 Synt

  • 问题内容: 我知道Google搜索可以找到合适的答案,但是我更喜欢听您的个人(也许是技术性的)意见。 Java和C#之间在引发异常方面有所不同的主要原因是什么? 在Java中,引发异常的方法的签名必须使用“ throws”关键字,而在C#中,您不知道在编译时是否可以引发异常。 问题答案: 因为对已检查异常的响应几乎总是: 如果您确实知道如果抛出特定异常,您可以执行某些操作,那么您可以捕获该异常,然