Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捕获特定的异常并在所有异常下执行相同的操作?_Java_Exception - Fatal编程技术网

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是正确的。