集中异常处理

时间:2013-03-13 13:33:07

标签: java exception

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

3 个答案:

答案 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);
   }
}