在一个catch块中使用多个异常有什么好处?

时间:2011-08-25 19:21:08

标签: java java-7

我们都听说过在Java 7中我们可以写:

try {
   //something with files and IO
} catch (FileNotFoundException | IOException ex) {
    ex.printStackTrace();
    System.out.println("It's can't copy file");
}

而不是

try {
   //something with files and IO
} catch (FileNotFoundException wx) {
    ex.printStackTrace();
} catch (IOException ex) {
   ex.printStackTrace();
}

但是,除了更短的代码之外,它还有什么好处呢? 即使我们希望在每个catch块中完成相同的操作,我们也可以:

  1. 只捕获IOException,因为FileNotFoundException是一个子类型 或
  2. 如果一个异常不是另一个异常的子类型,我们可以编写一些handleException()方法并在每个catch块中调用它。
  3. 那么,此功能是否仅用于更干净的代码或其他任何内容?

    感谢。

5 个答案:

答案 0 :(得分:10)

这不是为了使代码看起来更干净并保存击键。这些是附带福利。

重复会导致不一致和错误。因此,通过创建不需要重复的语法,可以避免真正的错误。这就是DRY背后的动机 - 不是漂亮的代码,写得更快。

答案 1 :(得分:2)

是的,主要是为了更清晰的代码。

答案 2 :(得分:1)

这个想法相当于:

之间的区别
if (myVar == true && myOtherVar == false)
    // Logic

if (myVar == true)
{
    if (myOtherVar == false)
        // Same logic
}

这只是更简洁,更清晰的代码。

答案 3 :(得分:1)

这是为了更清洁的代码......但这非常有价值。在某些情况下,您可以抛出4或5个异常,如果您想要做的只是在所有情况下都是相同的(通常是这种情况),这会减少大量代码。

这使它更具可读性,也更易于测试。这本身就足够有价值了。

答案 4 :(得分:1)

较短的代码意味着更少的维护代码 - 这不是那么小的优势。是的,我可以编写异常处理方法,但现在我不经常这样做,例如只有在不同的代码位置抛出异常时。