アサートと例外(Exception)

3558 ワード

  • ##断言と異常
  • 断言は、エラーではなく不正をチェックするために使用され、開発者の問題の位置を迅速に特定するために使用されます.
    例外処理は、プログラムに異常が発生した処理に使用され、プログラムの堅牢性とフォールトトレランス性を向上させる.
  • ##断言の使用
  • 防御プログラミングではパラメータや環境を断言(Assertion)で判断することが多く,プログラムが不適切な入力や誤った環境で論理異常を生じることを回避し,断言は多くの言語に存在し,C,C++,Pythonには異なる断言表現形式がある.Javaでのアサーションではassertキーワードが使用されていますが、基本的な使い方は以下の通りです.
    assert <     > 
    assert <     > : <    > 

    1.assert特性
    (1)assertのデフォルトは有効ではありません
    (2)assertが投げ出した異常AssertionErrorはErrorから受け継がれている
    2.assertを使用する場合の3つ
    (1)プライベートメソッドにassertを入力パラメータとして配置するチェック
    プライベートメソッドにはassertチェック入力パラメータを配置することができ、プライベートメソッドの使用者は著者自身であり、プライベートメソッドの呼び出し者と被呼び出し者との間には弱い契約関係、あるいは契約関係がなく、その間の制約は著者自身によって制御されるため、assertを加えることで自分のミス、あるいは無意識のプログラムミスをよりよく予防することができる.
    (2)フロー制御で到達不可能な領域
    これはJUnitのfailメソッドに似ています.そのシンボル的な意味は、プログラムがここまで実行されるのはエラーです.例えば、次のようなものです.
    public void doSomething(){  
    2      int i = 7;  
    3      while(i >7){  
    4         /*    */  
    5      }  
    6      assert false:"         ";  
    7 } 

    (3)プログラムプローブの作成
    2つの異なるビジネスの意味を表す2つの変数を1つのプログラムで定義する可能性がありますが、var 1=var 2*2のような固定的な関係がある場合は、プログラムのあちこちに「杭」を設けて、この2つの関係を断言することができます.すなわち、テーブルの順序に異常が発生している場合は、ビジネスを実行する必要はありません.
    3.アサーション方法説明
    (1) notNull(Object object)
    objectがnullでない場合に例外を放出します.notNull(Object object,String message)メソッドでは、messageで例外情報をカスタマイズできます.notNull()メソッド断言ルールとは逆のメソッドはisNull(Object object)/isNull(Object object,String message)であり、パラメータがnullであることを要求します.
    (2) isTrue(boolean expression)/isTrue(boolean expression, String message)
    expressionがtrueに異常を投げ出さない場合.
    (3)notEmpty(Collection collection)/notEmpty(Collection collection, String message)
    コレクションに要素が含まれていない場合に例外が放出されます.
    notEmpty(Mapmap)/notEmpty(Mapmap,String message)とnotEmpty(Object[]array,String message)/notEmpty(Object[]array,String message)はそれぞれMapとObject[]タイプのパラメータを判断する.
    (4)hasLength(String text)/hasLength(String text, String message)
    textがnullまたは長さが0の場合に異常を放出する.
    (5)hasText(String text)/hasText(String text, String message)
    textはnullではなく、少なくとも1つのスペース以外の文字を含む必要があります.そうしないと、例外が放出されます.
    (6) isInstanceOf(Class clazz, Object obj)/isInstanceOf(Class type, Object obj, String message)
    objがclazzで指定されたクラスに正しく造形できない場合、例外が放出されます.
    (7) isAssignable(Class superType, Class subType)/isAssignable(Class superType, Class subType, String message)
    subTypeはタイプ別にsuperTypeに一致する必要があります.そうしないと、異常が放出されます.
    Assertブレークスルークラスを使用すると、InputStream getData(String file)のようなメソッドパラメータ検出のコードを簡略化できます.Assertブレークスルークラスを適用すると、そのコードは以下の形式に簡略化できます.
    public InputStream getData(String file){ 
        Assert.hasText(file,"file           "); 
        ①    Spring             
    … 
    }