-1

A、B、C という 3 つのクラスがあり、すべての例外がクラス A に集中し、A が親クラス、B が A の子クラス、C が B の子クラスの場合、クラス C でアプリケーション定義の例外が発生した場合次に、その例外をクラス B にスローし、クラス B がクラス A にスローして例外を集中化します。実際にクラス C によってスローされるクラス A で例外トレースを取得するにはどうすればよいでしょうか。

4

3 に答える 3

1

まず第一に、現在の作業単位を中止してエラーをログに記録するだけでなく、実際に例外について別のことを行う場合を除いて、可能であればチェック例外を避けるようにしてください。

第 2 に、チェック済みの例外をコントロールの外部で発行するコードをラップする必要があります。

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

それ以外の場合、チェックされた例外が含まれていない場合は、何もキャッチしないでください。例外は、集中処理場所に自動的に上向きに伝播します。

最後に、説明どおりにすると、元のスタック トレースが常に保持されます。つまり、キャッチされた例外に直接、または で取得できる例外に保存されます.getCause()printStackTrace()aまたは aを実行するだけで、log.error("error", e)原因チェーン全体が自動的に取得されます。

于 2013-03-13T13:38:28.497 に答える
0

単純。親クラス A で例外を処理できるメソッドを定義します。

派生クラスでは、

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

スタック トレースを取得して知ることができThrowable#getStackTrace()、それぞれが 1 つのスタック フレームを表すスタック トレース要素の配列の形式でスタック トレースの情報を提供します。

これStackTraceElementには、LineNumber、メソッド名、実行されたクラス名が含まれます。そのため、実際に投げられた場所を知ることができます。

于 2013-03-13T13:36:43.677 に答える