如果我有3个名为A,B,C的类,所有异常都集中在A类中,A是父类,B是A的子类,C是子类B.now如果发生任何应用程序定义的异常在类C中然后它将该异常抛出到类B,并且类B抛出到类A以使异常集中。现在我们如何在类A中获得实际由类C抛出的异常跟踪。
答案 0 :(得分:1)
首先,如果可以的话,尽量避免检查异常,除了那些你真正对异常做其他事情的情况之外的任何事情,而不是中止当前的工作单元并记录错误。
其次,您应该使用
包装任何在控件之外发出检查异常的代码try {
...
} catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
否则,如果没有涉及已检查的例外,只需不捕捉任何内容,该异常将自动向上传播到您的集中处理位置。
最后,如果按照描述进行操作,您将始终保留原始堆栈跟踪:直接在捕获的异常中,或者在.getCause()
可以检索的异常中。如果您只是printStackTrace()
或log.error("error", e)
,您将自动获得整个原因链。
答案 1 :(得分:0)
您可以获得堆栈跟踪并且能够知道,Throwable#getStackTrace()
以堆栈跟踪元素数组的形式提供堆栈跟踪的信息,每个堆栈跟踪元素代表一个堆栈帧。
Ans StackTraceElement
包含LineNumber,方法名称,执行它的类名。所以你将能够知道它实际被抛出的位置。
答案 2 :(得分:0)
简单。定义一个可以处理父类A中的异常的方法。
在派生类中,
public void method(){
try{
//code
}catch(Exception e){
super.catchExceptionMethod(e);
}
}