3

私はこれを前に見たことがありません-それは何と呼ばれていますか?これは、ファイルの先頭にあるクラスレベルの変数です。

明確にするために、私はstatic {}変数の後を参照しています。

private static final UriMatcher URI_MATCHER;
    static {
        URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);
        URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH);
        URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH);
        URI_MATCHER.addURI(AUTHORITY, "books", BOOKS);
        URI_MATCHER.addURI(AUTHORITY, "books/#", BOOK_ID);
    }
4

5 に答える 5

4

これは静的初期化ブロックです。クラス内(ただしメソッド外)のどこでも宣言できますが、慣例により、通常、初期化される静的変数の直後に記述されます。これは、Java言語仕様のセクション§8.7で指定されています。

名前が示すように、これは通常、クラスのロード時にクラス内の静的属性の状態を初期化するために使用されます。Javaチュートリアルから:

静的初期化ブロックは、中括弧{}で囲まれ、静的キーワード(...)が前に付いた通常のコードブロックです。クラスには任意の数の静的初期化ブロックを含めることができ、クラス本体のどこにでも表示できます。ランタイムシステムは、静的初期化ブロックがソースコードに表示される順序で呼び出されることを保証します。

于 2012-05-22T18:20:24.127 に答える
2

これは静的変数を初期化するために使用されます。ご存知のように、クラスのコンストラクターでそれらを初期化することはできないため、staticブロックを使用できます。例として、静的配列に値1、2、3などを入力します。2つの方法があります:

public class Main {
    static int[] array1 = {1, 2, 3, 4 ...};

    static int[] array2;
    static {
        array2 = new int[N];
        for (int i = 0; i < N; i++) {
            array2[i] = i;
        }
    }
}
于 2012-05-22T18:24:54.053 に答える
1

これは、宣言された後に静的変数URI_MATCHERを初期化するコードの静的部分です。

于 2012-05-22T18:20:25.360 に答える
0

これは単なる静的初期化ブロックです。チェックアウト:http ://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

于 2012-05-22T18:22:19.827 に答える
0

これは静的初期化ブロックです。これにより、静的フィールドを「設定」できます。これは、クラスインスタンスのメソッドでは正しく実行できません。

于 2012-05-22T18:21:14.567 に答える