Java中的静态块vs初始化块?

可能重复:
静态初始化块

考虑下面的代码

public class Test { { System.out.println("Empty block"); } static { System.out.println("Static block"); } public static void main(String[] args) { Test t = new Test(); } } 

我们知道,首先执行静态块,然后是块。 但问题是,我从来没有能够理解一个空白块的真正效用。 任何人都可以展示一个真实的例子 –

  • 正在使用静态空的
  • 静态块和块都有不同的工具

他们有两个完全不同的目的:

  • 静态初始化块将在加载类时被调用,并且将不能访问实例variables或方法。 根据@Phahalad Deshpande的评论,它经常被用来创build静态variables。
  • 另一方面,非静态的初始化块只在对象结构上创build,将有权访问实例variables和方法,并且(按照@EJP所提出的重要校正)将在构造函数的开头被调用,在超级构造函数已被调用(显式或隐式),并任何其他后续的构造函数代码被调用之前。 我已经看到它用于一个类有多个构造函数,并需要为所有构造函数调用相同的初始化代码。 就像构造函数一样,你应该避免在这个块中调用非final方法。

请注意,这个问题已经多次在stackoverflow中回答,你会做好search和审查类似的问题和他们的答案。 例如: 静态初始化块

静态块在您的类加载时执行。 每当你实例化你的类时,空块就会被执行。 尝试比较这些:

1。

 public static void main(String[] args) { Test t = new Test(); } 

2。

 public static void main(String[] args) { } 

输出:

1。

静态块
空块

2。

静态块

在Layman中,静态块只被调用一次 ,不pipe你创build的types有多less个。