我可以以某种方式在方法
中使用这段代码 if (!printStackTrace_printed) {
ex.printStackTrace();
printStackTrace_printed=true;
}
logStoreException(ex);
throw new Exception(ex.getMessage());
并在每个catch块中调用它并将正确的参数传递给 ex 或 npe
catch (RationalTestException ex) {
if (!printStackTrace_printed) {
ex.printStackTrace();
printStackTrace_printed=true;
}
logStoreException(ex);
throw new Exception(ex.getMessage());
}
catch (NullPointerException npe) {
if (!printStackTrace_printed) {
npe.printStackTrace();
printStackTrace_printed=true;
}
logStoreException(npe);
throw new Exception(npe.getMessage());
}
catch (Exception ex) {
if (!printStackTrace_printed) {
ex.printStackTrace();
printStackTrace_printed=true;
}
logStoreException(ex);
throw new Exception(ex.getMessage());
}
答案 0 :(得分:3)
由于您在最后一次捕获中捕获Exception
,并且所有catch块都相同,因此您可以完全删除其他两个catch块而不会影响该程序。
它没有任何区别的原因是NullPointerException
是Exception
的子类,因此捕获Exception
也会捕获NullPointerException
以及引发的任何其他异常试试块。
请注意,一般情况下,捕获Exception
被视为反模式,但服务器调用的最高级别除外。
答案 1 :(得分:0)
您只能输入其中一个catch块,而不是全部,所以您根本不需要'printStackTrace_printed'布尔值。一般情况下捕获一个异常并抛出另一个异常也是不好的做法,但如果你有理由这样做,你只需要捕获异常,而不是其他两个。所以你的问题大多消失了。