在Java中处理运行时异常

com*_*ose 3 java exception-handling

我有以下代码

 try{//do something
     }
  catch (Exception e) {
        log.error(e, e);
        if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            throw new RuntimeException(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

findbugs stataic分析工具会抛出此警告

对于methodX中的所有非空值,instanceof将始终返回true,因为所有RuntimeException都是RuntimeException的实例

我不明白的是它的异常被捕获而不是RuntimeException,为什么这个警告呢?

Ale*_*lov 6

也许,// do something代码不会抛出任何已检查的异常,因此您可以在try-block中获得的唯一异常是未经检查的异常(子类化RuntimeException).


Dan*_*ann 4

您也可以尝试以下代码。这将更好地阅读和维护。

try{//do something
}
catch (RuntimeException e) {
    throw e;
} 
catch (Exception e) {
    throw new RuntimeException(e);
}
Run Code Online (Sandbox Code Playgroud)