【问题标题】:try ,catch, finally execution [duplicate]尝试,捕捉,最后执行[重复]
【发布时间】:2012-08-18 01:05:26
【问题描述】:

可能重复:
throws Exception in finally blocks

  • 只有在 try 块中抛出异常时才会执行 catch 块。

  • finally 块总是在 try(-catch) 块之后执行,无论是否抛出异常。

我的问题是 IF 我在 finally 块中遇到异常而不是如何处理它??????

【问题讨论】:

  • 抓住它并处理或扔掉它?完全取决于您的应用程序。
  • 可能在外部 finally 块中的内部 try 块?
  • 您可以抛出一个导致返回值的异常(在 catch 或 finally 块中),您可以返回一个导致异常的值(从 finally 块中)

标签: java try-catch try-finally


【解决方案1】:

这是 Java 语言规范中众所周知的问题/陷阱,如果在 finally 子句中抛出异常(没有在嵌套的 try-catch 中处理它),原始异常就会丢失。您需要嵌套一个新的 try-catch 来捕获新的异常,并在那里处理它。

【讨论】:

  • 在 java 7 中有一种方法可以处理它。现在有一个“抑制”异常的概念,您可以将多个异常绑定在一起(请参阅Throwable.addSuppressed())。这是为新的 try-with-resources 功能添加的。
  • +1 你在 catch 块中抛出异常也有同样的问题。
【解决方案2】:

你必须处理finally块中的异常

喜欢

finally{
    try
    {
       ///
    }
    catch(Exception e)
    {
      ///  
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2010-11-23
    • 2013-08-04
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多