java - 为什么 "try without catch"不满足异常处理的 "handle or declare law"?

标签 java exception

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/

相关文章:

Java——必须返回 boolean 类型(但我返回 true 或 false)

php - 有效电子邮件地址的 Swift_RfcComplianceException,适用于 Windows 而不是 Ubuntu

java - Java-7 中的自定义包装异常与 Multi-Catch

java - 我正在使用操作监听器创建一个新的 JFrame,但无法更改背景颜色

java - 从/root/storage/emulated/0 复制文件在 android 上失败

JavaScript 压缩器输出换行而不是分号 - 基于 Windows

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

exception - Blender 在启动时崩溃,EXCEPTION_ACCESS_VIOLATION

java.lang.IllegalAccessException : Tried to access visual service WindowManager from a non-visual Context

java - Eclipse Workspace 用户名和密码