在下面的代码中:
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);
一旦我解决了第一个错误,就会出现编译错误。
问 - 为什么静态变量引用编译错误没有首先出现?
最佳答案
事情是:您假设编译器按照错误在源代码中出现的顺序给出错误。但这不是编译器的工作方式。
当然,当您有 5 个同类错误时,您可以期望按照行号的顺序得到它们。
但是当您有不同的类别时,编译器可以决定首先关注哪个类别。您会发现:与查看变量和范围界定相比,识别方法中错误修饰符要容易得多。
并注意:在方法体内有访问修饰符,这是一个语法问题。首先发现并报告纯粹的语法问题是有道理的。 pvInt
的事情更复杂,这是关于语义的!编译器需要完全了解类的(静态)字段,然后才能进行检查。
关于java - 编译错误序列: Static compilation error coming after resolving access modifier error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164008/