我已经在findbugs网站http://findbugs.sourceforge.net/bugDescriptions.html
中阅读了错误检测器我想编写测试代码并使用Findbugs来检测REC错误。 但是虫子不能。为什么?你能帮我解决一下吗?
谢谢,
以下是Findbugs中的描述。
REC:未抛出异常时捕获异常(REC_CATCH_EXCEPTION)
此方法使用捕获异常对象的try-catch块,但不会在try块中抛出异常,并且不会显式捕获RuntimeException。将try {...} catch(Exception e){something}作为捕获许多类型的异常的简写是一种常见的bug模式,每个异常的catch块都是相同的,但是这个构造也意外地捕获了RuntimeException。 ,掩盖潜在的错误。
更好的方法是显式捕获抛出的特定异常,或者显式捕获RuntimeException异常,重新抛出它,然后捕获所有非运行时异常,如下所示:
try {
...
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
... deal with all non-runtime exceptions ...
}
我的代码是:
public static void test1(){
int A[] = {1,2,3};
int result = 5/0;//divided by 0
int arrOut = A[0]+A[4];//index out of bound
System.out.println(arrOut);
System.out.println(result);
try {
} catch (RuntimeException e) {
// TODO: handle exception
System.out.println("Runtimeex throw");
throw e;
} catch (Exception e) {
// TODO: handle exception
System.out.println("An try error occurred: 0 cannot be divided");
}
}
答案 0 :(得分:3)
try
是您要捕获的异常发生的地方。但是,由于它发生在try
块之外,catch部分未捕获异常,这就是FindBugs将其报告为无用的try {...} catch {...}
代码的原因。正确的代码应如下所示。
int A[] = {1,2,3};
try {
int result = 5/0;//divided by 0
int arrOut = A[0]+A[4];//index out of bound
System.out.println(arrOut);
System.out.println(result);
} catch (RuntimeException e) {
// TODO: handle exception
System.out.println("Runtimeex throw");
throw e;
} catch (Exception e) {
// TODO: handle exception
System.out.println("An try error occurred: 0 cannot be divided");
}
}