-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 不能在 static 中引用,而在 m1() 中引用,它首先由 static 块调用?在main里面,j的值打印为3000?那么谁能告诉我我在这里理解的问题是什么?

4

2 回答 2

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已经分配了 value 2000,因此它报告了您期望的值。

于 2019-12-29T07:20:33.393 回答
0

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

于 2019-12-29T07:22:17.847 回答