Java静态初始化程序似乎是多余的

时间:2012-04-17 15:14:29

标签: java initialization

所以我确实阅读了从这个线程执行静态initalizer的内容。 Static initializer in 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,如果我不使用静态initalizer,实例变量会在构造函数之前获得初始化,并且在super之后。所以两个班级不会做同样的事情吗?

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

哪种解决方案无关紧要,只是技术性,我见过人们同时使用这两种解决方案。

答案 4 :(得分:0)

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

相关问题