【发布时间】:2015-10-18 18:39:47
【问题描述】:
原问题
鉴于以下方法是库的一部分(因此无法编辑)(另外,A() 是私有的,因此无法在 m() 之外调用):
void m() {
try {
A();
} catch (Exception e) {
B();
throw e;
}
}
当调用m() 时,A() 会生成一个Exception e,因此会执行B()。但是,B() 也会抛出一个异常,然后将其向上传递(而不是 e 稍后将向上传递一行)。
是否可以找到Exception e?也许使用一些智能反射或多线程暂停和继续方法?
解释为什么我选择了最佳答案,还有什么可能有帮助
诚的回答:
e丢失,因为任何抛出的异常都会导致执行突然完成。
是我的问题的正确答案(即无法通过编程方式检索Exception e)。
但是,我想指出 Sean Patrick Floyd 的评论:
如果您无法更改代码,您唯一的机会是使用调试器并在 catch 块内设置断点。
还有 Pinkie Swirl 的评论:
请注意,通过调试仍然可以看到 e 及其信息(堆栈跟踪等)
实际上帮助我解决了我的问题:通过调试器(我遇到的异常是 SQLException,所以我真的需要知道解决问题的方法)。
【问题讨论】:
-
如果您无法更改代码,您唯一的机会是使用调试器并在 catch 块内设置断点。但除此之外,如果不更改代码,您将永远不会看到该异常
标签: java exception try-catch stack-trace throw