java - 最终和捕获后写入之间的区别

原文 标签 java exception try-catch try-catch-finally

“最终”和“追赶”后写有什么区别?

例如:

public boolean example() {
    try {
        // Code
    } catch (RuntimeException e) {
        // Code
    } finally {
        return true;
    }
}

public boolean example() {
    try {
        // Code
    } catch (RuntimeException e) {
        // Code
    } 
    return true;
}

最佳答案

首先,甚至可以认为是候选词的唯一成语是:

try {
    // stuff
} catch (Throwable t) { 
    // handle
}
// finally stuff

注意捕获的类型。仅当您捕获到任何可能的异常(包括ThreadDeathVirtualMachineError这样的黑暗怪兽)时,您才希望无条件地到达try-catch下面的代码。

但是,这只是开始。如果处理代码本身引发异常怎么办?所以你至少需要
try { 
    // main stuff
} catch (Throwable t) {
    try { 
        // handle 
    } catch (Throwable t) { 
        // no code allowed here! Otherwise we descend into
        // infinite recursion
    }
}
// finally stuff

现在您可能已经开始意识到finally的好处,但这还不是全部。考虑一个非常典型的场景:
try { 
  // main stuff, may throw an exception. I want the exception to
  // break what I'm doing here and propagate to the caller.
  return true;
} finally { 
    // clean up, even if about to propagate the exception 
}

你怎么重写这个?如果没有代码重复,那是不可能的。

关于java - 最终和捕获后写入之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17261843/

相关文章:

java - HTTP 获取而不等待响应

java - JTextPane/JTextField 带有稀有字符的奇怪行为

c - 为什么在这里引发异常,指出“运行时检查失败#2-变量'f'周围的堆栈已损坏”。

c# - 遍历Dictionary时的KeyNotFoundException

c# - AWS .net Core Lambda 项目中的全局异常处理程序?

java.lang.ClassCastException : $Proxy96 cannot be cast to ticket. app.DatesFacade

java - 安卓 :How to animate the speedometer needle

java - 如何正确捕获空指针异常

c# - 我应该将所有WCF服务代码包装在try catch block 中吗?

Android API 级别 < 19 和 "try can use automatic resource management"警告