在*定义之前无法引用字段“错误

时间:2014-03-05 11:45:43

标签: java reference

public class Test1 {
 static{
    a=20;  
 //  System.out.println(a); //Line 4
    }
    static int a=getA();

private static int getA() {
    return 10;
}
public static void main(String[] args) {
    System.out.println(a);
}
}

为什么显示错误?但是如果删除Line工作正常?

2 个答案:

答案 0 :(得分:1)

订单很重要。

static个字段,阻止根据源代码中的顺序执行。

移动声明。因此它可用于下面的块。

答案 1 :(得分:0)

如果您在静态初始值设定项之前声明a,则它可以正常工作:

public class Test1 {
    static int a=getA();
    static{
        a=20;  
        System.out.println(a);
    }

    private static int getA() {
        return 10;
    }
    public static void main(String[] args) {
        System.out.println(a);
    }
}

静态初始化按照在代码中编写的顺序完成。这意味着在您的代码中,您首先将a设置为20,然后将其初始化为getA() - 这就像您在函数内完成它一样非法。