有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

调试如何在Java中记录由finally block的异常掩盖的异常?

只需一个音符: 我知道在Java中finally块永远不应该抛出异常,否则这是[非常、非常、非常]糟糕的做法
知道我应该使用try-catch内部finally来处理(例如记录或忽略)所有异常,并防止它们传播
我知道Java7的Throwable有getSuppressed方法,但我的目标是Java5&;六,

问题:在Java中,在try-finally中,如果try块引发异常(将其命名为A),控件将到达finally块(在没有异常的情况下,它也会到达,但在这个问题中它并不有趣)。然后,如果finally块抛出一个异常(将其命名为B),异常A被抑制,或者被屏蔽/吞没,异常B被传播到调用方

问题:当一个异常被另一个异常抑制并记录第一个异常时,我能否以某种方式检测到这种情况
... 我花了太多时间去推理为什么会抛出特定的异常,却不知道到底发生了什么

理由:通常有问题的try-finally块是在库中编码的(今天是Hibernate),所以我无法修改它们

解决方案约束:正如我在一开始所指出的,可能的解决方案不应该依赖于Java 7,但另一方面,不需要是生产级的(这样做会有好处)。AOP是这里的一个选项

(请不要发布像“使用Java 7进行开发”这样的琐碎回答:


共 (1) 个答案

  1. # 1 楼答案

    有一个名为“ExceptionCheck()”的JNI方法,毫不奇怪,它会检查挂起的异常。您可以在本机方法的中间调用它,以查看某个先前调用是否抛出了一个异常,该异常等待JNI方法在实际抛出之前返回。我想知道您是否可以从finally调用本机方法,然后尝试使用ExceptionCheck查看是否存在挂起的异常,这是否可行。我不知道是否会,但我认为值得一试