ホームページ  >  記事  >  类库下载  >  Java キーワード Assert の学習

Java キーワード Assert の学習

高洛峰
高洛峰オリジナル
2016-10-09 09:04:061720ブラウズ

Java ソース コードを勉強していたときに、珍しいキーワード Assert を発見しました。このキーワードの使い方を直接紹介しましょう。

アサートとは何ですか?

jdk1.4以降に新たに追加されたキーワードでなくなりました。

assert の機能は何ですか?

assert は、多くのプログラミング言語のアサーションに使用されます。

しかし、アサーションとは何でしょうか?

それはブール式が真かどうかの単純な判断ですか?

さて、これらの質問は終わりにして、早速本題に入りましょう。

主張する、主張する。

assertの翻訳を見ると、assertは主張、維持、永続性を意味することがわかります。

言い換えると、assert (盗難防止接続: この記事は http://www.cnblogs.com/jilodream/ から最初に公開されました) に続く条件が満たされ、維持される必要があり、そうでない場合はエラーが発生します。

assert

assert の使用には 2 つの部分が含まれます

(1) コード内のキーワードの使用:

assert 使用方法は 2 つあります:

1)

assert をアサートし、続いてブール式。

式の値が true の場合、現在の条件は要件を満たしているとみなされ、ビジネス コードは引き続き実行されます。

式の値が false の場合、現在の条件が要件を満たしていないとみなされ、ただちに AssertionError がスローされます。

AssertionError extends Error extends Throwable.Throw はあまり使用されないクラスですが、Exception というサブクラスもあります。例外と同様、エラーはシステムが検出すべきではない重大な問題です。

2)assert BooleanCondition:Excepiton

assertの後には、ブール式と戻り値が基本型である式が続きます。

式が true の場合、残りのビジネス コードは引き続き実行されます (盗難防止接続: この記事はもともと http://www.cnblogs.com/jilodream/ から公開されました)、および「:」に続く式実行されません。

式が false の場合、「:」に続く式が実行され、結果が AssertionError 例外に入れられてスローされます。

コード例は次のとおりです:

public class assertStudy
{
    public static void main(String args[]) 
    {
        assert 1 == 1;
        System.out.println("A Go!");
        System.out.println("\n-----------------------------------------------\n");
        assert 1 != 1 : "Wrong";
        System.out.println("B Go!");
    }
}

(2) キーワードの有効性

上記のアサートにブレークポイントを追加します。デバッグすると、ブレークポイントで一時停止がなく、直接スキップされることがわかります。

なぜですか?これは、assert キーワードが Java 起動項目によって設定されているためです。

起動時に、-ea

java -eaassertStudy

を介してスイッチをオンにする必要があります。このようにして、assert 行のブレークポイントが有効になることがわかります (デフォルトでは有効になっていません)。

そして

java -daassertStudy なので、assert は無効になります

Eclipse でキーワードの有効性を有効にする方法は次のとおりです:

メニューを選択します: Run--->Run...---> を選択します。 [引数] タブ

VM 引数テキスト ボックスに「-ea」と入力します。-da を入力すると、アサーションが禁止されることを意味します

(上記のパスが見つからない場合は、開いてください)順番に実行します (盗難防止接続: この記事は http://www .cnblogs.com/jilodream/ から最初に公開されました) アサーションの開始: Windows -> 設定 -> Java -> インストールされた JRE -> 使用されている JDK をクリックします-> 編集 -> デフォルトの VM 引数 テキスト ボックスに入力します: -ea)

assert の必要性

assert の説明を通して、assert が Java の if と非常に似ていることがわかります。では、なぜ Java はそのようなキーワードを追加するのでしょうか?また、jdk1.4 などの後続のバージョンに追加する必要がありますか?

assert の記述に注意してください。スローされる例外は Error です。

assert の本来の目的は、その環境で通常の使用において問題が発生しない条件を判断することです。これらのコードは、基本クラス、フレームワーク クラス、ツール クラスなどのコア コードに現れることがよくあります。これらのコードの通常の動作では、パラメーターの例外はありません (盗難防止関連: この記事は http://www.cnblogs.com/jilodream/ から最初に公開されました)。ただし、リフレクションや動的プロキシなどを通じて特定のキーの値が変更されると、多数の異常なシナリオが発生します。そして、これらのシナリオを保護するために、基本的に効果のない if 判定を多数追加すると、これらの基本的に効果のない if 判定は、コードの読みやすさと単純さに深刻な影響を与えるだけでなく、読者にこれらの異常性を感じさせることになります。シナリオは頻繁に発生し、システムのパフォーマンスに一定の影響を与えます。

そして、assert は設定項目を通じてこのコードが有効になるかどうかを効果的に制御できます。これは実際には非常にエレガントな動作です。

ps この段落を書いた後、私はとてもテレビショッピングのような気分になります....

その他の状況

1. -ea と -da は、クラスおよびパッケージのパスの特定のレベルを効果的に指すことができます。アサートの有効性をより柔軟に制御することが可能になります。具体的な使用法は次のとおりです。

-ea java -ea はすべてのユーザー クラスのアサーションを開きます

-da java -da はすべてのユーザー クラスのアサーションを閉じます

-ea: java -ea:MyClass1 は MyClass1 のアサーションを開きます

-da: java -da: MyClass1 MyClass1 のアサーションを閉じる

-ea: java -ea:pkg1 pkg1 パッケージのアサーションを開く -da: java

-da:pkg1 pkg1 パッケージのアサーションを閉じる

-ea:... java -ea :... デフォルトのパッケージ(名前のないパッケージ)のアサーションを開きます

-da:... java -da:... デフォルトのパッケージ(名前のないパッケージ)のアサーションを閉じます)

-ea:... java -ea :pkg1... pkg1 パッケージとそのサブパッケージのアサーションを開きます

-da:... java -da:pkg1... pkg1 パッケージとそのサブパッケージのアサーションを閉じます

-esa java -esa システム クラスのアサーションを開きます

-dsa java -dsaシステムクラスのアサーション

2. Assert を使用するということは、通常の状況ではこのようなことは決して起こらないことを知っていることを意味しますが、OS や JVM で時折説明できないエラーが発生することも知っており、同時に、コードを書いた人があなたが思っていたものと異なっており、あなたのコードを間違って呼び出した場合、あなたに電話をかけることはできません。つまり:

1) アサートは、ユーザーのコア処理コードに配置されることがよくあります。Java ソース コードを見ると、ソース コード内に多数のアサート キーワードがあることがわかります。

2)assert は通常の状況では決して発生しない状況を処理するため、通常のビジネス プロセスで使用されます。

3) Assertは継承できません

親クラスのassertがonになっている場合、サブクラスのassertメソッドを実行しても、デフォルトではサブクラスはonになりません。

逆に、サブクラスのassertを有効にすると、親クラスのassertメソッドを実行したときに、親クラスのassertは有効になりません。

リファレンスドキュメント

http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html

http://lavasoft.blog.51cto.com/62575/43735

http://www. zhihu.com/question/24461924


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。