Подтвердить что ты не робот

Статическая инициализация переменных java

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

пытается выполнить следующее:

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

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

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

4b9b3361

Ответ 1

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

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

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

private static final B a;

static {
  a = new B();
}

Ответ 2

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


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

    public class A {

      private static B b = new B();

      A() {
      }

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