3

因此,我确实阅读了从该线程执行静态初始化程序的内容和时间。Java 中的静态初始化程序。但是我遇到了一些其他人编写的旧代码,似乎无法理解他为什么会以他的方式使用它。

我的课:

public class ClassA extends Thread {
  .... private vars ....

  private static Config config;

  static {
    config = null;
  }

  public ClassA(Config config) {
    ClassA.config = config;
  }
}

他为什么不这样做呢?

public class ClassA extends Thread {
  .... private vars ....

  private static Config config = null;

  public ClassA(Config config) {
    ClassA.config = config;
  }
}

我知道静态初始化程序在重新生成类时被调用,因此它设置 config => null,而如果我不使用静态初始化程序,实例变量在构造函数之前和超级之后获取初始化程序。那么这两个班级不会做同样的事情吗?

4

5 回答 5

5

这些类同样的事情,但更复杂的静态初始化器不能总是在一行中完成。

于 2012-04-17T15:16:50.790 回答
3

第一个示例中的静态初始化程序不会对该类的行为产生任何影响。你可以完全删除它,什么都不会改变。

于 2012-04-17T15:17:28.143 回答
1

为什么我写x = x + 1而不是x++?没有什么特别的原因,我就是这样做的。我认为这里是一样的,因为 2 基本上是相同的,这并不重要。另一方面,如果将来某个时候需要更复杂的初始化,也许他不能在那一行代码中做到这一点。

于 2012-04-17T15:17:34.510 回答
0

静态块只会在加载类时初始化一次配置,无论有多少 ClassA 实例。

哪个解决方案都没有关系,这只是一个技术性问题,我见过人们同时使用这两种解决方案。

于 2012-04-17T15:17:36.243 回答
0

两者都在做完全相同的事情,这是设计选择的问题。

于 2012-04-17T15:19:18.407 回答