java - 捕获可抛出并处理特定异常

标签 java exception exception-handling

好的,我知道捕获 throwable 不是一个好主意:

    try {
         // Some code
    } catch(Throwable e) { // Not cool!
        // handle the exception
    }

但最近我在阅读一个开源代码时,看到了这段有趣的(至少对我而言)代码:

    try {
        // Some Code
    } catch (Throwable ex){
        response = handleException(ex, resource);
    }

    private handleException(Throwable t, String resource) {
        if (t instanceof SQLEXception) {
               // Some code
        } else if (t instanceof IllegalArgumentException) {
               //some code
        } //so on and so forth
    }

这似乎没有那么糟糕?这种方法有什么问题?

最佳答案

您不应该捕获 Throwable 有多种原因。首先,Throwable 包含 Error - 如果出现其中之一,应用程序通常无能为力。 Throwable 也减少了你发现发生了什么的机会。你得到的只是“发生了一些不好的事情”——这可能是一场灾难,也可能只是一种滋扰。

另一种方法更好,但当然我仍然不会捕获 Throwable,但如果可能的话, try catch 更具体的异常。否则,您会捕获一切,然后尝试找出发生了哪种坏事。你的例子可以写成...

try {
    ...
} catch (SQLEXception ex){
    response = ... ;
} catch (IllegalArgumentException ex){
    response = ...;
}

...这将减少 if ( ... instanceof ... ) block 的数量(这只是因为作者首先决定在一个大桶中捕获所有内容而需要)。它实际上是 throws Throwable,那么你当然没有太多选择。

关于java - 捕获可抛出并处理特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585265/

相关文章:

java - 具有 SSL 安全性的 GWT

java - 在 java 中查找整数数组中的模式长度?

java - 使用 Jersey 客户端时出现错误

java - PHP exec() 不接受 java 类路径

c++ - 抛出的对象分配在哪里?

java - '->' 运算符在 Objective C 中代表什么?

swift - “Fatal error: Unexpectedly found nil while unwrapping an Optional value”是什么意思?

c# - 当一个任务引发另一个任务与第一个任务同步时,Task.WaitAll挂起

java - 未编码类的属性 setter 中的 jaxb 异常管理

python - 捕获我在计算中得到 NaN 的那一刻