86

重複の可能性:
静的初期化ブロック

次のコードを検討してください。

public class Test {
    {
        System.out.println("Empty block");
    }
    static {
        System.out.println("Static block");
    }
    public static void main(String[] args) {
        Test t = new Test();
    }
}

最初に静的ブロックが実行され、次にのブロックが実行されることを理解しています。しかし、問題は、空のブロックの実際の有用性を理解できなかったことです。誰もが実際の例を示すことができますか?

  • 静的ブロックと空のブロックの両方が使用されています
  • 静的ブロックと空のブロックの両方に異なるユーティリティがあります
4

2 に答える 2

114

それらは2つの非常に異なる目的のためのものです:

  • 静的初期化ブロックは、クラスのロード時に呼び出され、インスタンス変数またはメソッドにアクセスできなくなります。@Prahalad Deshpandeのコメントによると、静的変数を作成するためによく使用されます。
  • 一方、非静的初期化ブロックはオブジェクト構築でのみ作成され、インスタンス変数とメソッドにアクセスでき、(@ EJPによって提案された重要な修正に従って)コンストラクターの最初、スーパーコンストラクターが(明示的または暗黙的に)呼び出され、他の後続のコンストラクターコードが呼び出される前に呼び出されました。クラスに複数のコンストラクターがあり、すべてのコンストラクターに対して同じ初期化コードが必要な場合に使用されるのを見てきました。コンストラクターの場合と同様に、このブロックで非finalメソッドを呼び出さないようにする必要があります。

Note that this question has been answered many times in stackoverflow and you would do well to search and review the similar questions and their answers. For example: static-initialization-blocks

于 2012-09-23T06:08:27.667 に答える
26

The static block is executed whenever your class loads. The empty block is executed whenever you instantiate your class. Try comparing these:

1.

public static void main(String[] args) {
    Test t = new Test();
}

2.

public static void main(String[] args) {

}

Outputs:

1.

Static block
Empty block

2.

Static block

In Layman words, static block only gets called once, no matter how many objects of that type you create.

于 2012-09-23T06:09:41.500 に答える