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个。