【发布时间】:2011-08-25 19:21:08
【问题描述】:
我们都听说在 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 块中完成相同的操作,我们也可以:
- 只捕获 IOException,因为 FileNotFoundException 是一个子类型。
或 - 如果一个异常不是另一个异常的子类型,我们可以编写一些handleException() 方法并在每个catch 块中调用它。
那么,这个功能是只用于更简洁的代码还是其他任何用途?
谢谢。
【问题讨论】:
-
所以这是一个疯狂的问题。如果想为一个异常而不是另一个异常执行操作会发生什么。例如,您想要 filenotfound 但不是 io 的堆栈跟踪。 ex会打印2个错误的堆栈跟踪吗?是否有一种方法可以创建多个异常,例如这个 catch (FileNotFoundException wx | IOException ex)。注意 FileNotFoundException 末尾的 wx。然后,您是否可以针对不同的异常调用不同的操作,或者您是否坚持一刀切
-
@OVERTONE - 你确定你可以这样使用它吗?在我看到的所有示例中,两个异常对象都进入一个变量。
-
@dan 这就是我的意思。我不认为你可以这样使用它。我不在带有 java 7 或任何我的 IDES 的机器上,所以我无法检查。但我认为,如果我们可以选择在同一个块中使用这种漂亮的语法声明多个单独的异常,那就太好了。它看起来比拥有 6-8 个 catch 块要干净得多,但是如果您尝试记录特定异常或对其执行某些操作,那么您就不走运了。
-
您可以编写一个 handleException 函数,但是:[1] 您需要在参数中传递所有相关信息(使辅助函数看起来比它需要的更复杂)并且 [2] 您无法从
catch中获得return,因为您将在另一个函数中。