在Java中处理运行时异常

时间:2012-05-23 09:58:18

标签: 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);
        }
    }

findbugs stataic分析工具会在其上发出此警告

  对于methodX中的所有非空值,

instanceof将始终返回true,因为所有RuntimeException都是RuntimeException的实例

我不明白的是它被捕获的异常而不是RuntimeException,为什么会出现此警告?

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

try{//do something
}
catch (RuntimeException e) {
    throw e;
} 
catch (Exception e) {
    throw new RuntimeException(e);
}

答案 2 :(得分:2)

可能在“try”部分没有抛出RuntimeException的方法。因此,您可以使用构造

catch(RuntimeException e)
{
 //Do something
}

答案 3 :(得分:0)

试试http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html#propagate%28java.lang.Throwable%29。它完全符合你的要求。今天我做了替换的原因相同(findbugs警告),也看了这个方法的来源。