“躲避例外”是什么意思?

2022-09-01 05:56:31

在 Java™ 教程的“异常的优点”部分中:

方法可以避免其中引发的任何异常,从而允许调用堆栈更远的方法捕获它。

[...]

...回避异常需要中间人方法的一些努力。可以在方法中引发的任何已检验异常都必须在其子句中指定。throws

这里的“躲避例外”是什么意思?我搜索了网络和FOLDOC(免费在线计算词典),但没有找到任何看起来很有前途的东西。


答案 1

好吧,躲闪只是意味着低下头,以避免被击中或看到。在这种情况下,“躲避异常”只是意味着避免你的代码被异常击中。

为了使您的方法不被异常击中,您可以通过在方法上声明异常来将其进一步向上抛出调用堆栈throws

public void myMethod() throws IOException {

}

如果你不躲避,你必须这样做:catch

public void myMethod() {
    try {
       // ...  

    } catch(IOException e) {
      // handle exception
    }

答案 2

“躲避异常”意味着“不处理异常”。这实际上解释了这个名字:躲避意味着“逃避;躲闪”。

躲避异常的方法根本不处理它(因为,例如,这不是它的目的),并让异常被抛给调用方法。

例如,考虑一个方法,其目的是计算文件中的行数。这将是一个简单的实现(Java 8):

private static long numberOfLines(Path path) throws IOException {
    try (BufferedReader br = Files.newBufferedReader(path)) {
        return br.lines().count();
    }
}

请注意,此方法不处理 由 抛出的 那个,因为这不是方法目标。它躲避并让调用方适当地处理它。IOExceptionFiles.newBufferedReader(path)

请注意,调用方也可能回避异常,让调用方处理它,依此类推。