Java 捕获特定的异常并在所有异常下执行相同的操作?
我在我的遗留项目中看到了下面的代码,其中我捕获了不同类型的异常,目的只是记录它们Java 捕获特定的异常并在所有异常下执行相同的操作?,java,exception,Java,Exception,我在我的遗留项目中看到了下面的代码,其中我捕获了不同类型的异常,目的只是记录它们 try { //somecode } catch (ProjectExceptionException1 e) { log.error(e.getMessage(), e); } catch (ProjectExceptionException2 e) { log.error(e
try {
//somecode
}
catch (ProjectExceptionException1 e) {
log.error(e.getMessage(), e);
}
catch (ProjectExceptionException2 e) {
log.error(e.getMessage(), e);
}
catch (Exception e) {
log.error(e.getMessage(), e);
}
我的观点是,如果需求只是记录异常(无论是否选中),那么上面的代码应该替换为下面的代码
这使得代码更简单,可读性更强。根据我的理解,捕获特定异常并执行
都是一样的东西。不是吗?如果我遗漏了什么,请告诉我
try {
//somecode
}
catch (Exception e) {
log.error(e.getMessage(), e);
}
更新:-即使您在UI上抛出特定异常只是为了显示堆栈跟踪,如下所示。即使如此,这也没有意义
.基本上,如果我们想以特殊的方式处理特定的异常,那么它是有意义的。对吧?
try {
//somecode
}
catch (ProjectExceptionException1 e1) {
throw e1;
}
catch (ProjectExceptionException2 e2) {
throw e2;
}
catch (Exception e3) {
throw e3;
}
是的,用单个
捕获(异常e)
替换顶部块是完全可以的,只要您只记录并且不需要任何异常
特定的处理。从那时起,您可以捕获多个异常,并使用以下语法以相同的方式处理它们:
catch (ProjectExceptionException1 | ProjectExceptionException2 ex)
因此,如果您希望记录一些异常,但对其他异常执行操作,则可以以这种方式对行为进行分组,前提是您希望执行的操作相同。e、 g.打印堆栈跟踪,然后记录ProjectExceptionException1
和ProjectExceptionException2
,但只记录其他所有内容。如果可以将代码升级到java 1.7,则可以使用新的多捕获功能。它可能是这样的:
try {
//somecode
}
catch (ProjectExceptionException1 | ProjectExceptionException2 e) {
log.error(e.getMessage(), e);
}
您可能需要重新考虑捕获异常,并且只捕获您知道将由try块中的代码引发的异常,这样您就不会仅仅求助于记录意外异常。
这里有一个链接,通过示例详细介绍了该功能:如果您只是在登录,请按照您在第二个代码段中的建议执行。@merlin2011是正确的。