ホームページ >Java >&#&チュートリアル >Java の静的初期化ブロックと非静的初期化ブロック: 違いは何ですか?

Java の静的初期化ブロックと非静的初期化ブロック: 違いは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-31 13:33:17679ブラウズ

Static vs. Non-Static Initialization Blocks in Java: What's the Difference?

静的初期化コード ブロックと非静的初期化コード ブロック

Java では、クラス中に実行されるコード ブロックをクラス内で宣言できます。初期化またはオブジェクトのインスタンス化。どちらのタイプのコード ブロックも特定のアクションを実行するために使用できますが、スコープと動作が異なります。

静的初期化コード ブロック

静的初期化コード ブロックは次のとおりです。開始中括弧 { の前に static キーワードを使用して宣言します。これは、特定のオブジェクトではなく、クラス自体に関連付けられます。このコード ブロックは、クラスが Java 仮想マシン (JVM) によってロードされるときに 1 回だけ実行されます。これは通常、静的 Final 変数などのクラス レベルの定数を初期化するために使用されます。

例:

public class Test {
    private static final int a;
    
    static {
        a = 5;
        doSomething(a);
    }

    private static int doSomething(int x) {
        return (x+5);
    }
}

この例では、静的初期化ブロックは静的 Final 変数 a を次のように初期化します。値 5 を設定し、doSomething メソッドを呼び出します。静的であるため、ブロック内から静的変数 a にアクセスできます。

非静的初期化コード ブロック

非静的初期化コード ブロックもインスタンス初期化ブロックとして知られるこのブロックは、static キーワードなしで宣言されます。これはオブジェクトに関連付けられ、そのクラスのオブジェクトが作成されるたびに実行されます。このコード ブロックは通常、インスタンス レベルの変数を初期化するか、オブジェクトに必要なセットアップを実行するために使用されます。

例:

public class Test {
    private int a;
    
    {
        a = 5;
        doSomething(a);
    }

    private void doSomething(int x) {
        // ...
    }
}

この例では、非静的初期化ブロックインスタンス変数 a を値 5 で初期化し、doSomething メソッドを呼び出します。非静的であるため、現在のオブジェクトのインスタンス変数にのみアクセスできます。

目的とドキュメント

静的初期化コード ブロックは、クラスのセットアップに役立ちます-wide 定数と、クラスのロード中に実行する必要があるタスクの実行。これらは、入力パラメーターの検証、イベント ハンドラーの登録、ロギング フレームワークの初期化などのタスクに使用できます。

非静的初期化コード ブロックは、インスタンス レベルの変数を初期化し、オブジェクトに必要なセットアップを実行するために使用されます。これらは、デフォルト値の設定、入力の検証、子オブジェクトの作成などのタスクに使用できます。

静的および非静的初期化コード ブロックのドキュメントは、Java 言語仕様 (JLS)、特に次の場所にあります。クラスの初期化とインスタンスの初期化について説明するセクション。

以上がJava の静的初期化ブロックと非静的初期化ブロック: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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