静态变量初始化java

Roh*_*nga 41 java static initialization

如何在java中初始化类的私有静态成员.

尝试以下方法:

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

   void f1() {
         b.func();
   }
}
Run Code Online (Sandbox Code Playgroud)

但是在创建类A的第二个对象然后调用f1()时,我得到一个空指针异常.

sfu*_*ger 79

初始化静态成员的首选方法是(如前所述)

private static final B a = new B(); // consider making it final too
Run Code Online (Sandbox Code Playgroud)

或者对于更复杂的初始化代码,您可以使用静态初始化程序块:

private static final B a;

static {
  a = new B();
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用静态初始化程序块作为B的构造函数抛出异常.我仍然得到同样的错误.第一次调用库函数但不是第二次调用. (2认同)
  • 我认为,初始化静态成员的首选方式取决于实际情况.通过此模式创建*all*静态成员的软件在应用程序启动期间会受到性能影响.对于非平凡的情况,我赞成一种懒惰的初始化模式. (2认同)

KLE*_*KLE 5

你的代码应该有效.您确定要发布确切的代码吗?


您还可以直接初始化它:

    public class A {

      private static B b = new B();

      A() {
      }

      void f1() {
        b.func();
      }
    }
Run Code Online (Sandbox Code Playgroud)