各位高手,初学者求教。结合以下实例说下静态的用法。一直搞不懂为什么不是
a=10 
b=10public class TestClassLoader{
static int a = get();
static int b = 10;
static int get(){
return b;
    }
public static void main(String[] args){
TestClassLoader t= new TestClassLoader();
System.out.println("a:"+a);
System.out.println("b:"+b);
    }
}

解决方案 »

  1.   

    把static int b = 10;放到static int a = get();之前就是两个10了,应该是顺序问题,在int a的时候b还没有赋值,默认为0了
    另外在类第一次被使用时,静态变量就初始化了
      

  2.   

    是静态变量的初始化顺序问题,楼主把static int a = get()放在static int b = 10之前,这是b还没有被初始化。只要把static int b = 10放在static int a = get()之前就可以了。
      

  3.   

    这种说法的对的.在静态变量被初始化之前,其值全为0.
    初始化时,是按变量的顺序初始化的.
    所以先初始化a,调用get()方法,把b的值0赋给了a.
    再初始化b,赋一个10给b.
      

  4.   

    static字段在类第一次加载时就进行了初始化
    也就是
    在TestClassLoader t= new TestClassLoader();
    中就顺序地先对a进行初始化,由于此时b尚为0,a调用get()也是0
    之后b才初始化为10
    要让a和b都为10,就把a和b的初始化语句对调一下即可
      

  5.   

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