Java 如何显示catch和finally中的异常? 让我们考虑下面的代码: try { throw new Exception("from try") } catch (Exception e) { throw new Exception("from catch") } finally { throw new Exception("from finally") }

Java 如何显示catch和finally中的异常? 让我们考虑下面的代码: try { throw new Exception("from try") } catch (Exception e) { throw new Exception("from catch") } finally { throw new Exception("from finally") },java,groovy,Java,Groovy,它给出: Exception thrown java.lang.Exception: from finally <...> 引发异常 java.lang.Exception:来自finally 所以看起来finally在catch之前执行,并终止执行流 如果我想看到这两种例外情况,我该怎么办?我想这篇文章会帮助你: https://stackoverflow.com/questions/3779285/exception-thrown-in-catch-and-finally-c

它给出:

Exception thrown
java.lang.Exception: from finally
<...>
引发异常
java.lang.Exception:来自finally
所以看起来finally在catch之前执行,并终止执行流


如果我想看到这两种例外情况,我该怎么办?

我想这篇文章会帮助你:

https://stackoverflow.com/questions/3779285/exception-thrown-in-catch-and-finally-clause
所以看起来finally在catch之前执行并终止 执行流程


这是不对的<代码>最后执行时,在相应的捕获之后执行,而不是之前。问题是执行
catch
块,然后保证执行
finally
块。

一个方法不能抛出两次。如果抛出
finally
原因,catch()块中的throw语句将不会执行。另一方面,(显然)如果您使用System.out.println(..),您将看到所有消息,但无法确定您的实际问题。如果在
catch
块中执行一些清理,并且清理代码可以抛出,则可以使用嵌套:
。。catch{try{..}catch{..}
Java
中最后执行
块时,您不能在一个方法中引发两次异常。Try块在
catch
exception中处理。感谢您的catch@Daniele,我已经意识到我可以在catch{}中使用e.printStackTrace()。问题在于底层库中的异常。我在try块中创建了资源,在finally块中清理了资源。清理失败,资源未创建时出现异常,资源创建的异常最终被异常隐藏,所以我找不到问题所在,我认为除此之外,您可以在finally块抛出的异常的抑制异常中看到catch块抛出的异常。@emilles-我认为在原始问题中描述的场景中不会有任何抑制异常。我是不是搞错了?我在调试器中尝试了这一点,但没有可用的抑制异常。所以,并没有简单的方法来获取从catch块抛出的异常。