Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么spring只处理未检查的异常_Java_Spring_Exception - Fatal编程技术网

Java 为什么spring只处理未检查的异常

Java 为什么spring只处理未检查的异常,java,spring,exception,Java,Spring,Exception,我想知道为什么spring只处理未检查的异常。。。。。有谁能解释这背后的原因吗 Spring正在使用任何可以避免检查异常的设计模式 Spring使用的任何设计模式都将避免检查 例外情况 不是设计模式,而是异常处理的最佳实践 考虑以下代码: public void consumeAndForgetAllExceptions(){ try { ...some code that throws exceptions } catch (Exception ex){

我想知道为什么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只处理未检查的异常

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

设计API的最佳实践
  • 如果客户端可以采取其他操作从异常中恢复,请将其设置为选中异常
  • 如果客户端无法执行任何有用的操作,则取消选中异常。所谓有用,我指的是采取步骤从异常中恢复,而不仅仅是记录异常
Java API有许多未经检查的异常, 比如
NullPointerException
IllegalArgumentException
IllegalStateException
。我更喜欢使用Java提供的标准异常,而不是创建自己的异常。它们使我的代码易于理解,并避免增加代码的内存占用

另请参见:


Spring的中心主题是依赖注入和IOC。选中的异常会添加不必要的代码并创建更多依赖项。因此,检查异常的依赖性成本大于其好处。它们降低了测试代码的能力。它们导致较低的内聚力和较高的耦合。代码的目标应该是高内聚和低耦合。Spring专注于S.O.L.I.D的设计原则

我大体上同意你的回答,尤其是“最佳实践”部分。但是,如果未检查的异常是客户端无法采取有用操作的异常,为什么要在throws子句中声明它们?无论如何都无法执行任何有用的操作。在方法签名中声明未经检查的异常可提高可读性,并使工具(如IDE)有机会在调用此类方法的代码中建议有用的catch块。这实际上只是一种礼貌,但对呼叫者来说可能非常有用。提供商如何假设客户可以或不能做任何有用的事情,只有一个例外?