Head First Java(第 2 版)一书的“第 11 章:危险行为”中说“没有捕获的尝试不满足句柄或声明定律”,并给出了一个例子:
void go() throws fooException {
try {
x.doStuff();
} finally {
//something
}
}
但是,鉴于它向调用它的任何方法抛出异常而不处理问题,难道这段代码不能被解释为“回避”吗?
最佳答案
一般来说,如果您期望抛出异常,并且不打算自己捕获和处理它,则有礼貌地警告其他程序员您的方法将抛出异常。如果异常在没有声明的情况下冒出来,那么无论谁调用了爆炸方法,当他们的应用程序突然失败时都会感到惊讶。寻找解决此选择的方法被认为是不好的做法。
话虽如此,我在实践中几乎从未见过 try/finally 。一个更常见的编程错误是空的 catch block ,其中捕获异常并默默地丢弃。虽然 try/finally block 会明显地表现出来并在测试中很快被捕获,但空的 catch block 会产生更微妙的错误,因为程序不会通知任何人它正在破坏。
关于java - 为什么 "try without catch"不满足异常处理的 "handle or declare law"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34949076/