来自有效Java"记录每个方法抛出的所有异常"
应该注意的是,记录所有未检查的异常可以投掷的方法是一种理想,在现实世界中并不总是可以实现的。当类进行修订,如果导出的方法被修改为抛出其他未检查的异常。假设一个类从另一个独立编写的类中调用一个方法。这个前一类的作者可能会仔细地记录所有未检查的每个方法抛出的异常,但如果后一个类被修改为抛出额外的未检查异常,很可能前一个类(未进行修订)将传播新的未检查异常,甚至尽管它没有声明它们。
我不明白以前的课怎么能传播新的未经检查的借口?java语言没有强制调用方捕获和传播未检查的异常。
它将传播它,因为异常要么被捕获,要么被传播。如果未捕获,则传播异常:
public void caller() {
callee();
}
public void callee() {
throw new RuntimeException();
}
在上面的例子中,从callee()
抛出的异常将由caller()
方法传播,因为caller()
没有捕获它。
好吧,如果你没有捕捉到未检查的异常,它们会自动传播。
@Geek。。。是的,java语言不强制处理未检查的异常,如果您不处理任何未检查的例外。那么Java虚拟机(JVM)将处理由程序执行引发的所有异常。
如果被调用的方法不处理Exception,则Exception将传播到Calling方法。如果Calling方法不处理Exception,则Exception将传播到Java虚拟机,默认的异常处理程序将生效。