这里我已经编写了Java程序
public class Main {
static int i=2000;
public static void main(String[] args) {
System.out.print("value of j inside main "+j);
}
static {
m1();
System.out.print("value of i inside static block "+i);
}
static void m1() {
System.out.print("inside static method");
System.out.print("value of j inside static block "+j);
}
static int j =3000;
}
在静态块中,i的值显示为2000,但是在静态块中不能引用j的值?并且在m1()方法中j打印的值为0,但是j初始化了,那么为什么打印0?为什么j不能以静态方式引用,而又以静态块首先调用的m1()方式引用呢?并且在main内部,j的值打印为3000?所以谁能告诉我我在这里理解的错误吗?
这是您当前代码的输出:
inside static method value of j inside static block 0
value of i inside static block 2000
value of j inside main 3000
Java类中的静态块按它们出现的顺序进行求值。这意味着执行m1()
方法调用的静态块时,尚未为j
分配值,因此其值将报告为零。另一方面,已经为i
分配了值2000
,因此它将报告您期望的值。
这是“非法前向引用”,这意味着您试图在定义变量之前使用它。因此,您可以将static int j =3000;
移动到静态块之前。