黑马程序员-java语言特点4:静态方法变量的初始化
加载一个类时,它的静态初始化代码被执行。静态初始化代码段与静态变量的初始化同时进行,它们按词法顺序执行。例如,一个类c的声明如下:
class c{
static int a=1;
static {
a++;
b=7;
}B
static b=2;
}
当c被加载时,按以下顺序执行:
*a置为1。
*静态初始化段执行,a置为2,b置为7。
*b置为2.
如果静态初始化代码引用了其他未加载的类,这个类将被加载,它的静态初始化代码将先被执行。在静态初始化期间引用未加载的类,该类先加载并初始化。在初始化序列中,若引用到在它之前的未初始化的类时,就会发生循环。这将导致一个NoClassDefFoundException错误。
例如,当类A加载时,它的静态初始化代码被执行。但A的静态初始化代码引用了另外一个未加载的类B。这样B将被加载,它的静态初始化代码要在A之前执行,A的静态初始化随后执行。但如果B中静态初始化代码代码引用A,就导致了循环引用。