質問

どういうことですか 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の値を渡します。

     

詳細メッセージの目的は、アサーションの失敗の詳細をキャプチャし、通信することです。メッセージはあなたが診断し、最終的に失敗するアサーションを導いたエラーを修正できるようにする必要があります。詳細メッセージは、ユーザレベルのエラーメッセージではないので、単独でこれらのメッセージを理解するために、またはそれらを国際化することは一般に不要であることに留意されたいです。詳細メッセージが失敗したアサーションを含むソースコードと組み合わせて、完全なスタックトレースの文脈で解釈されることを意味する。

のJavaDocする

アサーションは、一般的に、プログラムの期待されるふるまいをチェックする手段として主に使用されています。プログラムの状態に関するプログラマの仮定が間違っているので、それは、ほとんどの場合、クラッシュにつながるはず。アサーションのデバッグ側面が来るところである。彼らは、我々は正しい振る舞いを持ちたいならば、我々は単に無視することができないチェックポイントを作成します。

それが将来的に機能を悪用からクライアントを防ぐことはできませんが、あなたのケースでは、入ってくるパラメータのデータ検証を行います。彼らはされていない場合は特に、(とはならない)リリースビルドに含まれます。

これは、式が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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top