是的,保证静态初始化程序块按文本顺序执行。
从JLS,第12.4.1节:
目的是类或接口类型具有一组初始化器,这些初始化器将其置于一致状态,并且该状态是其他类观察到的第一个状态。
静态初始值设定项和类变量初始值设定项以文本顺序执行
,并且不能引用在类中声明的类变量,这些类的声明在使用后以文本形式出现,即使这些类变量在范围内(第8.3.3节)。此限制旨在在编译时检测大多数循环或格式错误的初始化。
从12.4.2开始:
接下来, 以文本顺序 执行类的类变量初始化器和静态初始化器,或接口的字段初始化器,就好像它们是单个块一样。
不过,就我个人而言,我将所有变量声明放在开头,然后是单个静态初始化程序块。我认为这样做容易得多。



