This question already has answers here:
Static Block in Java [duplicate]

(7个答案)


4年前关闭。




我最近摸索到此代码:

  public static ArrayList<HelloGreeting> greetings = new ArrayList<HelloGreeting>();

  static {
    greetings.add(new HelloGreeting("hello world!"));
    greetings.add(new HelloGreeting("goodbye world!"));
  }


问题是为什么我们在这里使用static,不能仅仅这样做:

  public static ArrayList<HelloGreeting> greetings = new ArrayList<HelloGreeting>();

    greetings.add(new HelloGreeting("hello world!"));
    greetings.add(new HelloGreeting("goodbye world!"));


我们从空间或时间上获得什么好处?

最佳答案

如果要在加载类之后初始化某些数据,则在初始化它们时,可以使用静态块。静态块在每个类初始化时运行一次(如果一个类由不同的类加载器多次加载和初始化,则多次运行)。

静态块和非静态块之间的区别(第二种情况应该在{..}中闭包)是,对于每个YourClass实例,即在构造新实例时,将执行非静态块。接下来,静态块是线程安全的(尽管一个类可以由多个线程加载/初始化)

07-28 00:22