Possible Duplicate:
Static Initialization Blocks
考虑以下代码:
public class Test {
{
System.out.println("Empty block");
}
static {
System.out.println("Static block");
}
public static void main(String[] args) {
Test t = new Test();
}
}
我们知道首先会执行 static block ,然后是 empty block 。但问题是我一直无法理解 empty block 的真正用途。任何人都可以举一个真实的例子 -
- static 和 empty block 都在使用中
- static 和 empty block 都有不同的实用程序
最佳答案
它们有两个截然不同的目的:
- 静态初始化 block 将在加载类时被调用,并且无法访问实例变量或方法。根据@Prahalad Deshpande 的评论,它通常用于创建静态变量。
- 另一方面,非静态初始化 block 仅在对象构造时创建,可以访问实例变量和方法,并且(根据@EJP 建议的重要更正)将在构造函数的开头调用,在调用 super 构造函数之后(显式或隐式)并且之前调用任何其他后续构造函数代码。我已经看到当一个类有多个构造函数并且需要为所有构造函数调用相同的初始化代码时使用它。与构造函数一样,您应该避免在此 block 中调用非 final方法。
请注意,此问题已在 stackoverflow 中多次回答,您最好搜索和查看类似问题及其答案。例如:static-initialization-blocks
关于java - Java中的静态 block 与初始化 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550135/