静态初始化块对静态变量的访问问题。代码如下
public class ty {

static {
               a=1;
      System.out.println(a);  //a出现错误:“在定义字段之前不能引用该字段”. 但是将a换成ty.a无错误,者
                                          //将这个静态初始化块放在 static int a=0后面也可以。
}

static void dwt2() {
System.out.println(a);
}

static int a=0;
}那位大虾指点下,在此先行谢过

解决方案 »

  1.   

    初始化顺序:(静态变量、静态初始化块)>(变量、初始化块)>构造器
    子类的静态变量和静态初始化块是在父类的变量,初始化块和构造器初始化之前完成
    父类的变量初始化块构造器是在子类的变量初始化构造器之前完成
    静态变量和静态初始化块的初始化顺序取决于在类中顺序,同变量和初始化块
      

  2.   

     a=1; 改成int a = 1;
      

  3.   

    静态块,静态方法,静态变量都是在类被加载后开始调用的,只被调用1次,而且按照出现的先后顺序调用,所以类加载时先执行static {a=1; System.out.println(a);} 然后才执行static int a=0; 即先引用后定义,所以在运行程序的时候就报a出现错误:“在定义字段之前不能引用该字段”。如果将static {a=1; System.out.println(a);}放到static int a=0;则是先定义后引用,正常!