0

来自 Effective Java “记录所有方法抛出的异常

应该注意的是,记录每个方法可以抛出的所有未经检查的异常是一种理想,在现实世界中并不总是可以实现。当一个类进行修订时,如果修改导出的方法以引发额外的未经检查的异常,则不违反源代码或二进制兼容性。假设一个类调用另一个独立编写的类的方法。前一个类的作者可能会仔细记录每个方法抛出的所有未经检查的异常,但是如果修改后一个类以抛出额外的未经检查的异常,那么前一个类(没有经过修订)很可能会传播新的未经检查的异常,即使它没有声明它们。

我不明白以前的班级如何传播新的未经检查的例外?Java 语言不要求调用者捕获和传播未经检查的异常。

4

3 回答 3

2

好吧,如果您没有捕获未经检查的异常,它们会自动传播。

于 2012-07-20T08:35:08.537 回答
2

它将准确地传播它,因为异常要么被捕获要么被传播。如果未捕获,则会传播异常:

public void caller() {
    callee();
}

public void callee() {
    throw new RuntimeException();
}

在上面的示例中,抛出的异常callee()将由caller()方法传播,因为caller()它不会捕获它。

于 2012-07-20T08:37:19.910 回答
0

@Geek ...是的,Java语言不要求处理未经检查的异常,如果您不处理任何未经检查的异常。然后Java虚拟机(JVM)将处理程序执行抛出的所有异常。

If called method does not handle Exception, then Exception will propagate to Calling method. If Calling method does not handle Exception, then Exception will propagate to Java Virtual Machine and default exception handler will come into effect.

于 2012-07-20T08:54:03.517 回答