-1

如果我有 3 个名为 A、B、C 的类,并且所有异常都集中在 A 类中,A 是父类,B 是 A 的子类,C 是 B 的子类。现在,如果 C 类中发生任何应用程序定义的异常然后它将异常抛给B类,B类抛给A类以使异常集中。现在我们如何才能在A类中获得实际上由C类抛出的异常跟踪。

4

3 回答 3

1

首先,如果可以的话,尽量避免检查异常,除了那些你实际上对异常做了其他事情而不只是中止当前工作单元并记录错误的情况。

其次,您应该用

try { 
  ...
} catch (RuntimeException e) { throw e; } 
  catch (Exception e) { throw new RuntimeException(e); }

否则,如果不涉及已检查的异常,则不要捕获任何内容,异常将自动向上传播到您的集中处理位置。

最后,如果您按照描述进行操作,您将始终保留原始堆栈跟踪:直接在捕获的异常中,或者在可由.getCause(). 如果您只执行 aprintStackTrace()或 a log.error("error", e),您将自动获得整个原因链。

于 2013-03-13T13:38:28.497 回答
0

您可以获得堆栈跟踪并能够知道,Throwable#getStackTrace()以堆栈跟踪元素数组的形式提供堆栈跟踪信息,每个元素代表一个堆栈帧。

Ans 这StackTraceElement包含 LineNumber、方法名称、执行它的类名称。因此,您将能够知道它实际被抛出的位置。

于 2013-03-13T13:36:43.677 回答
0

简单的。在父类 A 中定义一个可以处理异常的方法。

在派生类中,

public void method(){
    try{
      //code
    }catch(Exception e){
      super.catchExceptionMethod(e);
   }
}
于 2013-03-13T13:37:31.197 回答