类的静态块是否在同一类的main方法之前执行?
示例:
public class Example {
static
{
System.out.println("hi");
}
public static void main(String[] args) {
System.out.println("bye");
}
}
该程序的输出是:
喜
再见
我怀疑的是为什么输出不是:
再见
答案 0 :(得分:2)
好的,我在命令提示符下使用-java示例运行程序时得到了答案。在后台java命令执行主线程为 - example.main() - 这类似于静态方法调用。 因此,静态块中的语句首先执行,而不是我的main方法。
答案 1 :(得分:1)
Java将在调用任何方法(或创建任何实例)之前运行类的静态初始化器。 JLS, Section 12.4.1,声明:
类或接口类型T将在第一次出现以下任何一个之前立即初始化:
T是一个类,并创建了一个T实例。
调用T声明的静态方法。
分配由T声明的静态字段。
使用T声明的静态字段,该字段不是常量变量(§4.12.4)。
T是顶级类(§7.6),并且执行词汇嵌套在T(§8.1.3)中的断言语句(§14.10)。
部分初始化顺序为:
- 接下来,按文本顺序执行类的类变量初始值设定项和静态初始值设定项,或接口的字段初始值设定项,就好像它们是单个块一样。
醇>
因此,首先运行静态初始化程序,然后打印“hi”;然后调用main
来打印“再见”。
答案 2 :(得分:0)
只有在main()中的任何内容之前执行静态块中的内容才有意义。如果你要定义“静态PI = 3.14157;”你不喜欢在主方法中知道吗?任何其他方式都会破坏目的。
事实证明,静态项目是在加载时执行的。