发现是否在try-finally块的最后部分抛出异常

par*_*lov 4 java try-finally

我有一个简单的问题,一个简单的代码部分,一些基本的try-finally块:

try {
  // Some code which can throw an Exception
} finally {
  // Some code which also can throw an Exception
}
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:我们有什么方法可以发现是否在finally块中抛出异常而不使用catch和一些局部变量在块之间传递信息?

我几乎没有什么情况可以使用,我不想添加一些丑陋的不必要的catch块来设置一些变量throw Exception.第一个例子是,如果我在某些Spring或容器管理的事务方法中,并且在try块中Exception发生了.finally在这种情况下,我需要创建新的事务来处理数据库.第二个例子是我不希望我的原始Exception被块Exception抛出掩盖finally,但如果没有Exception我会抛出它finally(如果有的话).

我知道这一切都可以完成,catch但有没有其他方式,Java中的一些元数据或其他任何东西?如果我们可以假设这将在一个中执行Thread,那么它可能会有所帮助,所以也许有一些方法可以发现与当前有关的异常Thread

And*_*ndy 6

这让我长期受挫.

我通常在顶部声明变量exceptionThrown = true,并在返回之前将其设置为false.然后你可以在finally处理程序中测试它.我认为这比捕捉和重新投掷更好,因为后一种方法会破坏堆栈跟踪.

我很惊讶Java和C#都没有更好的方法来处理它