ホームページ Java &#&チュートリアル Java で静的初期化ブロックをいつ使用するのか、なぜ使用するのか?

Java で静的初期化ブロックをいつ使用するのか、なぜ使用するのか?

Jan 02, 2025 pm 05:31 PM

When and Why Use Static Initialization Blocks in Java?

静的初期化ブロックについて

Java では、静的初期化ブロックは、クラス内の静的フィールドを初期化する特別なメカニズムを提供します。静的フィールドは 1 回だけ初期化され、クラスのすべてのインスタンスで同じ値を共有します。宣言内で静的フィールドに値を割り当てることは可能ですが、このアプローチが現実的でない特定のシナリオがあります。

静的初期化ブロックを使用する理由

状況を考えてみましょう。ここで、静的フィールドの値は、その宣言の時点では決定できません。たとえば、構成設定に基づいて初期化されたデータベース接続のリストを表すフィールドがあると想像してください。設定がまだ利用可能になっていないため、宣言内でこのフィールドを直接初期化することはできません。

そのような場合、静的初期化ブロックが機能します。これらのブロックはクラスの読み込み中に実行され、現在のコンテキストに基づいて静的フィールドを初期化する便利な方法を提供します。これらは静的中括弧で囲まれています:

public static class Test {
    static {
        // Initialize static fields here
    }
}
ログイン後にコピー

非静的ブロックと静的ブロック

静的初期化ブロックとは異なり、非静的ブロック (インスタンスとも呼ばれます)初期化ブロック) は、クラスのインスタンスが作成されるたびに実行されます。これらは、インスタンス固有のフィールドを初期化するか、他のセットアップ操作を実行するために使用されます。

静的ブロックと非静的ブロックの違いを説明するには、次のコードを検討してください。 :

public class Test {
    static {
        System.out.println("Static block executed once");
    }
    {
        System.out.println("Non-static block executed each time an instance is created");
    }
    public static void main(String[] args) {
        Test t1 = new Test(); // Non-static block executed
        Test t2 = new Test(); // Non-static block executed again
    }
}
ログイン後にコピー

このコードを実行すると、次のように表示されます。出力:

Static block executed once
Non-static block executed each time an instance is created
Non-static block executed each time an instance is created
ログイン後にコピー

ご覧のとおり、静的ブロックはクラスの読み込み中に 1 回だけ実行されますが、非静的ブロックはクラスのインスタンスが作成されるたびに実行されます。

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

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか? Mar 17, 2025 pm 05:43 PM

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20:キーパフォーマンスが向上し、新機能

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

Iceberg:データレイクテーブルの未来

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Mar 11, 2025 pm 05:51 PM

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか?

See all articles