1. ホーム
  2. java

[解決済み] Javaでのスタティックブロックとイニシャライザーブロックの違い?重複

2023-05-18 22:36:03

質問

重複の可能性があります。

静的初期化ブロック

次のようなものを考えてみましょう。 コード :

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

私たちは、まず 静的 ブロックが実行され、その後に 空の ブロックが実行されます。しかし問題は、私が 空の ブロックの本当の有用性を理解できないことです。どなたか、を使用した実際の例を示していただけませんか?

  • 両方とも 静的 ブロックが使用されている
  • 両方とも スタティック ブロックは異なるユーティリティを持ちます

どのように解決するのですか?

2つの全く異なる目的のためです。

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

この質問はstackoverflowで何度も回答されているので、類似の質問とその回答を検索して確認するとよいでしょう。たとえば static-initialization-blocks(静的初期化ブロック