2010-12-02 34 views

答えて

11

try ... catch - 例外条件、すなわち不正なコードによって引き起こされないが、外部の予測不可能なイベントによって正常な制御フローを変更する可能性のある条件。内部メソッドがなど

、(パブリックAPIのためにあなたはまだそのための例外をお勧めします)、右引数で呼び出された場合、すなわち、無効なコード、不変の機能に保持されている場合、チェックチェックをキャッチ ため

アサーション

これは私の基本的なガイドラインですが、規約は状況によって異なり、言語によっても異なります。


あなたが疑問にいるとき、あなた自身に尋ねることができます:は、特定の安全確認は、我々はすべてをテストし、終了した後も、リリースコードであっすることになっていることでしょうか?あなたが "はい、それはまだ必要です"と答えた場合は、おそらく例外が必要です。それ以外の場合は、おそらくアサーションが必要です。

5

通常、assert()はリリースコードでは機能しないため、try-catch戦略に置き換えることはできません。それにもかかわらず、私は例外がスローされる場所でassert()を使用するのが好きです。私にとっては(開発者として!)、例外スタックよりもエラーの行にassert()というメッセージを送るほうがしばしば便利です。

+1

これは主な違いです。アサーションコードは条件付き属性に帰属するため、リリースビルドでスキップすることができます。 –

2

さまざまな目的のために作成されています。 Assertはバグを発見するためのものです。try-catchは例外的な状況を処理するためのものです。

2

try-catchとassertの状況はまったく異なります。 Assertは、パラメータとして受け取った値が予期されるかどうかを確認するために使用されます。生産コードでassertを使用することはお勧めできません。単体テストで使用されており、ほとんどパラメータをチェックすることはほとんどありません。 のようなものを使用することをお勧め渡された値を確認するには:あなたがブロック内の何かが間違って行くことができます知っているとき

public void test(int i) { 
    if (i < 0) { 
    throw new IllegalArgumentException("i cannot be less than 0"); 
    } 
    ... 
} 

try-catchブロックが使用されています。たとえば、sdcardに書き込むと、書き込むスペースがありません。あるいは、あなたはそれを境界線から読み取ろうとしました。その後、あなたは、try-catchブロックで、あなたの重要なコードを入れて、excpetionsの確認:例外に関する

try { 
    InputStream is = new FileInputStream("filename.txt"); 
    ... 
} catch FileNotFoundExcpetion { 
    System.out.println("file not found"); 
} finally { 
... 
} 

Moreとブロックキャッチしてみてください。

関連する問題