2012-05-09 12 views
-1

私は5つのメソッドを持っています。 1、2、3、4、5メソッドmethod1からメソッド2を、メソッド2からメソッド3を呼び出しています。 Method5で例外が発生し、try-catchブロックで処理しているとします。Method1でこれをどのように知ることができますか?外部メソッドが内部メソッドで例外が発生したことを知る方法

+0

は例外ですか?そうであれば、5つのメソッドで宣言しますか?彼らがいなければ、5つの方法すべての署名を変更することが許されていますか?方法1で処理したい場合、方法5でそれをキャッチするいくつかの理由はありますか? ...それは主な質問に私を導く:誰がそれを扱うだろうか? 5つの方法のどれかがエラー状態を修正できる方法はありますか?あなたはそれを記録し、中止するはずですか?ユーザーに状況を解決するための有益なメッセージを表示してください... – jambriz

答えて

1

method1とmethod5の両方がアクセスできる変数/フラグを設定する必要があります。同じクラスのフィールドのようなものはうまくいくはずです。

private String exceptionHappened = ""; 

private void method1() { 
    method(2); 
    // Here I can check value of exceptionHappened 
} 

//... methods 2-4 

private void method5() { 
    try { 
     // ... 
    } catch (Exception e) { 
     this.exceptionHappened = "In method 5"; 
    } 
} 
+0

ありがとう、これは私が今使っているものです。 – user1281029

3

例外の伝播を調べることができます。この他のquestionはそれをかなりよく説明しています。本質的には、例外がtry-catchにない場合、例外は呼び出しスタックの先頭にあるか、キャッチされるまで呼び出されます。

+0

こんにちはしかし、例外の伝播は何ですか?それはJava5/6にあるのですか? – user1281029

+0

私はそれを使っている限り、Javaになっています。 [documentation](http://docs.oracle.com/javase/tutorial/essential/exceptions/)を参照してください。 [1.4.2](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Exception.html)には、私が見つけた最も初期のドキュメントがあります。 – Igor

0

キャッチされない場合、例外はメインメソッドに到達するまでコール階層内で伝播します。メソッドがコール階層内に例外があるかどうかを知りたい場合は、try-catchブロックで例外フローの制御を取得する必要があります。

0

ユーザー定義の例外を作成し、そのクラスにメソッド名を格納するプロパティを設定します。今urのケースでは、method5の 、catchブロックで、メソッド名を "methodname"プロパティに設定して作成したユーザー定義の例外をスローします。 fir method1(またはこれまでのルートメソッド)までその例外をスローし、次にmethodnameプロパティの値に基づいて、例外がスローされるメソッドを確認できます。

+0

フィードバックいただきありがとうございます。 – user1281029

関連する問題