在Java™教程的Advantages of Exceptions部分:
一个方法可以抛出在其中抛出的任何异常,从而允许一个方法更远的调用栈来捕获它。
[...]
...避免异常需要中间人方法的一些努力。必须在其
throws
子句中指定可以在方法中抛出的任何已检查异常。
"躲避异常"这意味着什么我搜索了网络和FOLDOC(免费在线计算词典),但没有找到任何看起来很有希望的东西。
答案 0 :(得分:29)
嗯,躲避只是意味着降低头部以避免被击中或被击中。在这种情况下,“避免异常”只是意味着避免代码被异常命中。
对于不被异常命中的方法,通过在方法上声明throws
异常将其抛出调用堆栈
public void myMethod() throws IOException {
}
如果你不躲避,你必须catch
:
public void myMethod() {
try {
// ...
} catch(IOException e) {
// handle exception
}
答案 1 :(得分:27)
“躲避异常”意味着“不处理异常”。这实际上解释了名称:to duck表示“逃避;躲闪”。
抛出异常的方法根本不处理它(因为,例如,它不是它的目的)并且将异常抛出到调用方法。
例如,考虑一种方法,其目的是计算文件中的行数。这将是一个简单的实现(Java 8):
private static long numberOfLines(Path path) throws IOException {
try (BufferedReader br = Files.newBufferedReader(path)) {
return br.lines().count();
}
}
请注意,此方法不处理IOException
引发的Files.newBufferedReader(path)
,因为这不是方法目标。它躲避并让调用者适当地处理它。
请注意,调用者也可以解除异常并让其调用者处理它等等。
答案 2 :(得分:5)
我认为这意味着一个方法可以捕获异常并将其重新抛出以供其他方法捕获并根据需要处理它。或者只是抛出一个新的例外。或者避免捕获异常并让它冒泡调用堆栈。关键是要有一个方法委托异常处理到其他可能更适合处理给定异常的方法(例如,通过访问必要的数据和/或状态)。但是(对于java
)这需要始终使用throws
子句声明方法,这很容易成为样板
在@ jmcg的评论中提到,字面意思是“ DUCK只是意味着降低头部以避免被击中或看到”(就像鸭子在河里一样)
答案 3 :(得分:0)
我认为鸭子意味着重新抛出异常...换句话说,忽略它希望别人会处理它:)