Java静态块前向引用的问,希望能耐心的跟小弟讲解下

[size=xx-small][/size][code="java"] static {
b = 9;
int i = b;// 报错
int j = b = 9;
System.out.println(b);// 报错
}
static {
b = 9;
int i = Test2.b;// 不报错
int j = b = 9;
System.out.println(Test2.b);// 不报错
}
static int b=0;[/code]

[size=large]
这到底是什么原因,谁能给我详细解释下,这个块的前向引用和方法的前向引用有什么区别,
重点是:为什么等号左边可以省略类名,等号右边调用的时候不可以省略类名?[/size]

[code="java"]
static int b=0; //放上来

static {   
    b = 9;   
    int i = b;
    int j = b = 9;   
    System.out.println(b);
}   
static {   
    b = 9;   
    int i = T03.b;  
    int j = b = 9;   
    System.out.println(T03.b);   
}  

[/code]
这样就好了 估计是Sun的规定吧

静态变量可以使用类名直接访问到,分配给全局变量的内存,一直到程序运行结束时才释放。
所以可以类名直接访问到。

你这段代码所在的类名是Test2吧

一个类里面的静态成员变量的值和类本身有关 和对象无关 所以可以由类名直接调用

Test2.b所作的事就是加载类 一般一个类加载的时候所作的事是 实例化静态成员变量 执行静态代码块

你可以把static int b=0;放到静态代码块上面去 他们执行时有顺序的

这些做完才会有以后的调用构造方法