来自Effective Java“通过各种方法记录所有例外情况”
应该注意的是,记录每个未经检查的所有异常 方法可以抛出是理想的,在现实世界中并不总是可以实现。当一个 如果经过修改,则不会违反源或二进制兼容性 修改导出的方法以抛出其他未经检查的异常。 假设一个类从另一个独立编写的类调用一个方法。该 前一类的作者可能会仔细记录所有未经检查的内容 每个方法抛出的异常,但如果后一个类被修改为抛出 额外的未经检查的异常,很可能是前一个类(其中有 未经过修订)将传播新的未经检查的例外 虽然它没有声明它们。
我无法理解前类如何传播新的未经检查的激活? java语言不强制调用者捕获和传播未经检查的异常。
答案 0 :(得分:2)
好吧,如果您没有捕获未经检查的异常,它们会自动传播。
答案 1 :(得分:2)
它会准确地传播它,因为异常被捕获或传播。如果未捕获,则会传播异常:
public void caller() {
callee();
}
public void callee() {
throw new RuntimeException();
}
在上面的示例中,callee()
引发的异常将由caller()
方法传播,因为caller()
无法捕获它。
答案 2 :(得分:0)
@Geek ...是的,java语言没有强制要求处理未经检查的异常,如果你没有处理任何未经检查的异常。然后Java虚拟机(JVM)将处理程序执行引发的所有异常。
如果被调用的方法不处理Exception,则Exception将传播到Calling方法。如果Calling方法不处理Exception,则Exception将传播到Java Virtual Machine,默认异常处理程序将生效。