web-dev-qa-db-ja.com

静的変数の初期化java

javaでクラスのプライベート静的メンバーを初期化する方法。

以下を試してください:

public class A {
   private static B b = null;
   public A() {
       if (b == null)
         b = new B();
   }

   void f1() {
         b.func();
   }
}

しかし、クラスAの2番目のオブジェクトを作成してからf1()を呼び出すと、nullポインター例外が発生します。

41
Rohit Banga

静的メンバーを初期化する好ましい方法は次のいずれかです(前述のとおり)

private static final B a = new B(); // consider making it final too

または、より複雑な初期化コードには、静的初期化ブロックを使用できます。

private static final B a;

static {
  a = new B();
}
78
sfussenegger

コードが機能するはずです。正確なコードを投稿しますか?


より直接初期化することもできます:

    public class A {

      private static B b = new B();

      A() {
      }

      void f1() {
        b.func();
      }
    }
5
KLE