Java 哪种方法是一次捕获多个异常的更好方法?

Java 哪种方法是一次捕获多个异常的更好方法?,java,exception,try-catch,Java,Exception,Try Catch,有许多方法可以捕获编程中的“异常”。总是建议捕获程序中的“已知”异常,而不是简单地捕获异常 catch (IOException ex){ // does contain FileNotFoundException System.out.println("Exception found"); throw ex; } 为了减少不必要的重复代码片段,我们可以一次捕获多个异常并执行进一步的步骤。我可以找到两种简单的方法 方法1: catch (IOExceptio

有许多方法可以捕获编程中的“异常”。总是建议捕获程序中的“已知”异常,而不是简单地捕获
异常

catch (IOException ex){ // does contain FileNotFoundException
    System.out.println("Exception found");
    throw ex;
}
为了减少不必要的重复代码片段,我们可以一次捕获多个异常并执行进一步的步骤。我可以找到两种简单的方法

方法1:

catch (IOException ex){
            System.out.println("Exception found");
            throw ex;
        }
catch (FileNotFoundException ex){
            System.out.println("Exception found");
            throw ex;
        }
方法2:

catch (IOException|FileNotFoundException ex){
            System.out.println("Exception found");
            throw ex;
        }

在java中,哪种方法更适合一次处理多个异常?有更好的方法吗?

请注意,在捕获
IOException
之前必须捕获
FileNotFoundException
,因为
FileNotFoundException
IOException
。否则,您将永远无法访问
文件NotFoundException
。因此,在您的示例中,您只能捕获
IOException
,因为它包含
FileNotFoundException

catch (IOException ex){ // does contain FileNotFoundException
    System.out.println("Exception found");
    throw ex;
}
一般来说:如果catch块中有相同的代码,那么应该使用multi-catch,否则会有重复的代码。我看不出有什么问题(事实上,这就是为什么Java中引入了multi-catch)


当然,情况并非总是如此。如果必须以不同的方式处理异常,则必须定义不同的catch块。

还有另一种方法。我们可以使用catch块中的if条件进行选择

catch (Exception ex){
if(ex==IOException){
      System.out.println("Exception found");
      throw ex;}
else if (ex==FileNotFoundException){
      System.out.println("Exception found");
      throw ex;}
            }
}

方法1和方法2不做相同的事情。如果没有其他异常,那么Method2更好,因为它是自文档代码。确定这是Java吗?方法1只会以相反的顺序工作。FileNotFoundException是一个IOException,因此如果首先捕获IOException,您将永远无法到达FileNotFoundException。或者有更好的方法来实现这一点吗?我们还可以使用案例选择,因为它既不是有效的Java代码,也不是一个好的模式。在这种情况下,您可以隐藏运行时异常。请不要这样做,而是使用默认的Java语法。事实上,这是一种反模式。