2010-12-12 27 views
9

それは最高のネットの練習についての質問です。次のように私はいつも私のウェブと窓フォームアプリケーションのすべてで例外についての情報をキャッチし、保存された:例外の処理方法は?

  1. は、フロント層以外の任意の層のためのtryキャッチ(例外例外)
  2. で各メソッドを囲まれ、に例外を投げました上のレイヤー
  3. フロントレイヤーでは、ログファイル(通常log4config.dllを使用)に例外を記録し、ユーザーフレンドリーなメッセージをユーザーに提示しました。

これは例外を処理する最善の方法ですか?あるいは次のプロジェクトで何か違うことをするべきですか?

+0

あなたがトライキャッチ(例外例外) – Stilgar

+0

試し{//何かない}正確には – InfoLearner

答えて

2

次のコードは、問題がある:

public void Foo() { 
    try { 
     Bar(); 
    } catch(Exception e) { 
     throw e; // re-throw; overwrites original stacktrace in 'e' 
    } 
} 

次のコードは、上記のスタックトレースの上書きの問題を抱えているが、依然として不必要に冗長ですしません:

public void Foo() { 
    try { 
     Bar(); 
    } catch(Exception e) { 
     throw; // re-throw; preserves original stacktrace in 'e' 
    } 
} 

両方とも次のように書かれています。あなたのcatchブロックが再スローされる例外でやっている唯一のことは、全くcatchブロックを記述する必要がない場合、これは次のとおりです。ここで

public void Foo() { 
    Bar(); 
} 
+4

キャッチ(例外例外){//何かを行う}、「Eを投げると1.Surroundedで各メソッドをどういう意味ですか"それはスタックを失い、1つを再作成するので悪化します。 –

+0

こうして、善意のコードが物事を悪化させるのがどれほど簡単かを証明する:) –

+0

@Simon - 良いキャッチ。ありがとう。私は自分の答えを更新しました。 –

6

で取得することができます。例えば、メッセージを変更(ラップ)する。とにかく例外は上向きになるので、必要はありません。間違って実行すると、間違いなく重要なスタックトレース(throw;throw ex;)が削除される可能性があります。それが診断するのに問題が難しくなりますeの元のスタックトレースを、上書きされるため

-1

はどのようにませにあります例外を処理します。

public void method1(){ 
    try{ 
     .... 
     // all the code goes here 
     // declare any helper methods throw throwable 
     // eg: private boolean check1() throws Throwable{ ...} 
     .... 
    }catch(Throwable t){ 
     System.out.println("oops...error...good luck debugging. "); 
    } 
} 
+0

誰もこの例外を処理するためにレイジーな方法を提案することはできません。 – rana