静态块和静态存储器的初始化和实现

问题描述 投票:-1回答:1

这里我已经编写了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?所以谁能告诉我我在这里理解的错误吗?

java static block
1个回答
0
投票

这是您当前代码的输出:

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,因此它将报告您期望的值。


0
投票

这是“非法前向引用”,这意味着您试图在定义变量之前使用它。因此,您可以将static int j =3000;移动到静态块之前。

© www.soinside.com 2019 - 2024. All rights reserved.