了解有效的Java有关记录未经检查的异常的提示

时间:2012-07-20 08:33:23

标签: java effective-java

来自Effective Java“通过各种方法记录所有例外情况

  

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

我无法理解前类如何传播新的未经检查的激活? java语言不强制调用者捕获和传播未经检查的异常。

3 个答案:

答案 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,默认异常处理程序将生效。