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工作正常?
答案 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()
- 这就像您在函数内完成它一样非法。