带有
static修饰符的代码块表示一个类初始化程序。没有静态修饰符的代码块是实例初始化程序。
当加载类时(实际上是在解决时,这是技术性的),按定义的顺序执行类初始化器(自上而下,就像简单的变量初始化器一样)。
实例初始化程序按照实例化类时定义的顺序执行,紧接在执行构造函数代码之前,紧接在超级构造函数调用之后。
如果
static从中删除
int a,它将成为一个实例变量,你将无法从静态初始值设定项块中访问该实例变量。这将无法通过错误“无法从静态上下文引用非静态变量a”进行编译。
如果你还
static从初始化程序块中删除,那么它将成为实例初始化程序,因此
int a在构造时进行初始化。



