「assert」キーワードは何をするのでしょうか?[重複]
質問
この質問にはすでに答えがあります:
どういうことですか assert
する?たとえば、関数内では次のようになります。
private static int charAt(String s, int d) {
assert d >= 0 && d <= s.length();
if (d == s.length()) return -1;
return s.charAt(d);
}
解決
あなたが(または略して-enableassertions
)-ea
を使用してプログラムを起動する場合は、この文
assert cond;
と等価です
if (!cond)
throw new AssertionError();
このオプションなしで、あなたのプログラムを起動した場合、assert文は効果がありません。
あなたの質問に投稿されたように、例えば、assert d >= 0 && d <= s.length();
は、
if (!(d >= 0 && d <= s.length()))
throw new AssertionError();
(あなたがある-enableassertions
で起動した場合。)
正式には、 Java言語仕様:14.10。
:次のように述べていのassert
ステートメント
の の14.10。
assert
文のの
の表明は、ブール式を含むassert
文です。アサーションは、を有効または無効のいずれかのです。アサーションが有効になっている場合は、アサーションの実行は、ブール式の評価とfalse
へのエラーが報告されたの場合、式の評価さの原因となります。アサーションが無効になっている場合は、アサーションの実行は全く効果がありません。の
ここで、の-ea
スイッチで制御され、ののAssertionError
がスローされることを意味します。
そして最後に、assert
のあまり知られていない機能:
あなたはこのよう: "Error message"
を追加することができます:
assert d != null : "d is null";
投げてAssertionErrorのエラーメッセージがどうあるべきかを指定します。
<時間>このポストは記事ここのように書き直されました。
他のヒント
、AssertionError
がスローされます。
アサーションはいますが、有効にする必要があります。それ以外の場合はassert
式は何もしません。参照してください。
ます。http:// javaの。 sun.com/j2se/1.5.0/docs/guide/language/assert.html#enable-disableする
assert
は、条件が真でない場合、プログラムはAssertionFailed
例外をスローするようになりますデバッグツールです。この場合、プログラムはいずれかの場合はfalseと評価され、次の2つの条件の例外がスローされます。 <ストライキ>一般的に言って、assert
はストライキ>
これについて多くのドキュメントを読みましたが、いつ、どこでどのように使用するかについてはまだ混乱しています。
非常にわかりやすくします。
次のような同様の状況が発生した場合:
String strA = null;
String strB = null;
if (2 > 1){
strA = "Hello World";
}
strB = strA.toLowerCase();
警告 (strB = strA.toLowerCase(); に黄色の線が表示される) が表示される場合があります。) strA が strB に NULL 値を生成する可能性があること。strB が最終的に null になることは絶対にないことはわかっていますが、念のため、assert を使用して
1.警告を無効にします。
2.最悪の事態が発生した場合 (アプリケーションの実行時)、例外エラーをスローします。
コードをコンパイルすると、結果が得られない場合がありますが、それはバグです。ただし、アプリケーションはクラッシュしないため、このバグの原因を見つけるのに非常に苦労します。
したがって、assert を入れると、次のようになります。
assert strA != null; //Adding here
strB = strA .toLowerCase();
strA が絶対に null 値ではないことをコンパイラに伝えると、警告を「平和的に」オフにすることができます。これが NULL の場合 (最悪のケースが発生する)、アプリケーションは停止され、バグをスローしてバグを見つけます。
の使用はAssertionErrorのための詳細メッセージを提供するために、assert文のこのバージョン。システムは、エラーの詳細メッセージとして、値の文字列表現を使用して適切てAssertionErrorコンストラクタにexpression2の値を渡します。
詳細メッセージの目的は、アサーションの失敗の詳細をキャプチャし、通信することです。メッセージはあなたが診断し、最終的に失敗するアサーションを導いたエラーを修正できるようにする必要があります。詳細メッセージは、ユーザレベルのエラーメッセージではないので、単独でこれらのメッセージを理解するために、またはそれらを国際化することは一般に不要であることに留意されたいです。詳細メッセージが失敗したアサーションを含むソースコードと組み合わせて、完全なスタックトレースの文脈で解釈されることを意味する。
アサーションは、一般的に、プログラムの期待されるふるまいをチェックする手段として主に使用されています。プログラムの状態に関するプログラマの仮定が間違っているので、それは、ほとんどの場合、クラッシュにつながるはず。アサーションのデバッグ側面が来るところである。彼らは、我々は正しい振る舞いを持ちたいならば、我々は単に無視することができないチェックポイントを作成します。
それが将来的に機能を悪用からクライアントを防ぐことはできませんが、あなたのケースでは、入ってくるパラメータのデータ検証を行います。彼らはされていない場合は特に、(とはならない)リリースビルドに含まれます。
これは、式がtrueを返すことを保証します。それ以外の場合は、java.lang.AssertionError
をスローします。
http://java.sun.com /docs/books/jls/third_edition/html/statements.html#14.10する
アサートは電源がオンになってアサーションを使用してアプリケーションを実行する場合はAssertionErrorをスローします。
int a = 42;
assert a >= 0 && d <= 10;
あなたがこれを実行すると、言う:のjavaの-ea -jar peiska.jar の
これ投げなければならにjava.lang.AssertionError の