问题描述
[size=xx-small][/size]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;这到底是什么原因,谁能给我详细解释下,这个块的前向引用和方法的前向引用有什么区别,重点是:为什么等号左边可以省略类名,等号右边调用的时候不可以省略类名?
解决方案
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); } 这样就好了 估计是Sun的规定吧
解决方案二:
你这段代码所在的类名是Test2吧 一个类里面的静态成员变量的值和类本身有关 和对象无关 所以可以由类名直接调用Test2.b所作的事就是加载类 一般一个类加载的时候所作的事是 实例化静态成员变量 执行静态代码块 你可以把static int b=0;放到静态代码块上面去 他们执行时有顺序的这些做完才会有以后的调用构造方法
解决方案三:
静态变量可以使用类名直接访问到,分配给全局变量的内存,一直到程序运行结束时才释放。 所以可以类名直接访问到。
时间: 2024-09-28 10:49:20