[Java] 例外処理でのアサーションの使用

アサーションを使用する

assert( Assertion) はプログラムをデバッグする方法の 1 つです。ではJavaassertキーワードを使用してアサーションを実装します。

まず例を見てみましょう。

public static void main(String[] args) {
    
    
    double x = Math.abs(-123.45);
    assert x >= 0;
    System.out.println(x);
}

ステートメントはassert x >= 0;アサーションであり、アサーション条件 x >= 0 が true であることが期待されます。false と評価された場合、アサーションは失敗し、スローされますAssertionError

Assert ステートメントを使用する場合、オプションのアサーション メッセージを追加することもできます。

assert x >= 0 : "x must >= 0";

このようにして、アサーションが失敗すると、 ``AssertionError`` はメッセージ x が 0 >= 0 でなければならないというメッセージを表示します。これはデバッグに便利です。

Java アサーションの特徴は、アサーションが失敗するとスローされAssertionError、プログラムが終了して終了することです。したがって、アサーションは回復可能なプログラミング エラーには使用できず、開発およびテスト中にのみ使用する必要があります。

アサーションは、回復可能なプログラミング エラーには使用しないでください。例えば:

void sort(int[] arr) {
    
    
    assert arr != null;
}

例外は上位層でスローおよびキャッチされる必要があります。

void sort(int[] arr) {
    
    
    if (arr == null) {
    
    
        throw new IllegalArgumentException("array cannot be null");
    }
}

たとえば、プログラムでassertを使用する場合、単純なアサーションは次のようになります。

// assert
public class Main {
    
    
    public static void main(String[] args) {
    
    
        int x = -1;
        assert x > 0;
        System.out.println(x);
    }
}

x は 0 より大きくなければならない、実際には x は -1 であることをアサートすると、アサーションは確実に失敗します。上記のコードを実行すると、プログラムは をスローせずAssertionError、通常どおり x の値を出力したことがわかりました。

このファットフォーはどうですか?Assert ステートメントが機能しないのはなぜですか?

これは、JVMアサーション命令がデフォルトでオフになっているためです。つまり、assert ステートメントは自動的に無視され、実行されません。

Assert ステートメントを実行するには、-enableassertions` (-ea と省略) パラメータを Java 仮想マシンに渡してアサーションを有効にする必要があります。したがって、上記のプログラムを有効にするには、コマンド ラインで実行する必要があります。

$ java -ea Main.java
Exception in thread "main" java.lang.AssertionError
	at Main.main(Main.java:5)

特定のクラスのアサーションを選択的に有効にすることもできます。コマンド ライン パラメーターは次のとおりです。これは、このクラス-ea:com.itranswarp.sample.Maincom.itranswarp.sample.Mainアサーションのみを有効にすることを意味します。

または、特定のパッケージのアサーションを有効にします。コマンド ライン パラメーターは次のとおりです-ea:com.itranswarp.sample...(最後に 3 . があることに注意してください)。これは、com.itranswarp.sampleこのパッケージのアサーションを有効にすることを意味します。

実際の開発では、アサーションが使用されることはほとんどありません。より良い方法は単体テストを作成することです。JUnit の使用法については後ほど説明します。

まとめ

アサーションはデバッグの方法であり、アサーションの失敗はスローされAssertionError、アサーションは開発およびテスト段階でのみ有効にできます。

回復可能なエラーはアサートできませんが、例外をスローする必要があります。

アサーションが使用されることはほとんどありません。より良いアプローチは単体テストを作成することです。

読んだ後に何かを得た場合は、Knowledge Planet コミュニティのディスカッションに参加することもできます。

おすすめ

転載: blog.csdn.net/ihero/article/details/132190132