在下面的代码中:
public class ModifierNotAllowInMethodCheck {
private int pvtInt;
public static void method1() {
System.out.println("pvtInt = " + pvtInt);
int var1 = 10;
System.out.println("var1 = " + var1);
public int var2 = 20;
System.out.println("var2 = " + var2);
} // end of method1()
public static void main(String args[]) {
method1();
} // end of main()
} // end of class
编译后,该语句
public int var2 = 20;
将是第一个编译错误,然后是该语句
System.out.println("pvtInt = " + pvtInt);
一旦我解决了第一个错误,就会成为编译错误。
问-为什么静态变量引用编译错误不首先出现?
答案 0 :(得分:2)
情况是:您假设,编译器将按照源代码中出现的顺序给出错误。但这不是编译器的工作方式。
当然,当您有5个相同类型的错误时,可以期望按行号的顺序得到它们。
但是当您有不同的类别时,编译器可以决定首先要考虑的类别。而且您会看到:与查看变量和范围界定相比,在方法中识别错误修饰符要容易得多。
并注意:在方法主体内的中具有访问修饰符,这是一个语法问题。首先发现并报告纯语法问题是有道理的。 pvInt
事情更复杂,那就是语义!编译器需要完全了解类的(静态)字段,然后才能进行检查。