статическая переменная инициализация Java - PullRequest
40 голосов
/ 29 октября 2009

как инициализировать закрытый статический член класса в Java.

пытается следующее:

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

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

но при создании второго объекта класса A и последующем вызове f1 () я получаю исключение нулевого указателя.

Ответы [ 2 ]

77 голосов
/ 29 октября 2009

Предпочтительными способами инициализации статических элементов являются (как упоминалось ранее)

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

или для более сложного кода инициализации вы можете использовать статический блок инициализатора:

private static final B a;

static {
  a = new B();
}
5 голосов
/ 29 октября 2009

Ваш код должен работать. Вы уверены, что публикуете свой точный код?


Вы также можете инициализировать его более напрямую:

    public class A {

      private static B b = new B();

      A() {
      }

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