アサーション

アサーションはJ2SDK 1.4から新しく追加された機能です。

アサーショが追加される前のバージョンでは実行時の変数値などの処理をチェック
する場合は確認したい変数値をあえてSystem.out.printlnメソッドで出力したり、
どこまで処理されたかをわかるようにメッセージを出力するようにして目的の動作が
正常に行われているかを確認していました。
でも、ひとつ問題がありました。

あくまでも正常な動作を行うかを確認するためだけにメッセージを出力したり、変数値の処理の 流れを確認するために出力していただけです。
では動作を確認された後はプログラマがそれらメッセージなどを手動で削除してやらなければ
いけませんでした。はっきり言って面倒な作業です。
これは動作の確認作業を行ってくれるのがアサーションです。

つまり、アサーションを使用した場合は、アサーションのコード部分を後から削除しなくても
すむため、プログラムのデパック作業を簡単にすることができます。

アサーションの定義方法

 
     assert 条件式(boolean式);


    assert 条件式(boolean式) : メッセージ; 

アサーションの定義はメソッド内及びコンストラクタ内、実行可能な場所であればどこにでも 定義できます。

アサーションを定義するには キーワード assert で定義します。

assertで定義された条件式(boolean式)の評価がtrueであればプログラムは何もせずに 次のコードに処理が移ります。

もし条件式(boolean式)の評価がfalseとなった場合AssertionError例外がスローされます。
また assertの 条件式の後ろのメッセージはassert例外がスローされたときにメッセージとして 表示されます。

アサーションを含むクラスのコンパイル方法

 
    javac -source 1.4 ソースファイル

(例) javac -source 1.4 Sample65.java 

デフォルトではアサーション機能は無効になっています。
アサーション機能を含んだプログラムをコンパイルするときは -source 1.4 を
指定してやらなければコンパイルエラーになります。

アサーションを有効化にする方法(実行時)

 
   全てのクラス内のアーサーションを有効にする
   
    java -ea クラスファイル

 利用している全てのクラスのアサーションが有効になります。


   指定したクラス内のアサーションを有効化
   
    java -ea:有効にしたいクラスファイル クラスファイル 

アサーション機能のメリットはリリース時の無効化削除をしなくてもよいことです。

今までの実行方法

たとえば java Sample65 で 実行した場合は assert文は無効化になっています。
そのため実行時に有効化してやる必要があります。
その方法は上記の通りです。

でもそれだけではまだ理解できないと思いますのでまたプログラムで確認します。

サンプルプログラム(Sample65.java)

class Sample65{
    public static void main(String args[]){

    Super65 obj = new Super65();

      obj.method();

   }

}
class Super65{


boolean b = true;
void method(){ assert b == false : "アサーションエラーです。"; System.out.println("アサーションエラーは発生していません");

}
}

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

まず、最初にアサーションを含むプログラムのコンパイル方法は

javac -source 1.4 Sample65.java

です。

まず、ここではboolean型の b にはtrueが代入されていて、それをassert で評価しています。
assert b == false の条件式の評価はfalseになることがこの式でわかると思います。
assert の条件式がfalseの時はアサーションエラーの例外がスローされます。
したがって実行結果のような出力結果になります。

もちろん、普通にコンパイル・実行もされます。
この場合は完全にアサーションを無視されます。


このようになります。
では、もうひとつプログラムを確認します。

サンプルプログラム(Sample65_1.java)

class Sample65_1{
    public static void main(String args[]){
  Super65_1 obj = new Super65_1();
      obj.method();


   }

}

class Super65_1{



boolean b = false;
void method(){ assert b == false : "アサーションエラーです。"; System.out.println("アサーションエラーは発生していません");
} }

Sponsored link

コンパイル・実行してみます。

今度はboolean b の値を falseにしました。
assert b == false によりassertの評価はtrueになりアサーションエラーにはならず
次の制御に処理が移るのでこのような結果になります。

ページのトップへ戻る