编译错误序列:解决访问修饰符错误后出现静态编译错误?

时间:2019-12-03 19:21:48

标签: java compiler-errors

在下面的代码中:

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);

一旦我解决了第一个错误,就会成为编译错误。

问-为什么静态变量引用编译错误不首先出现?

1 个答案:

答案 0 :(得分:2)

情况是:您假设,编译器将按照源代码中出现的顺序给出错误。但这不是编译器的工作方式。

当然,当您有5个相同类型的错误时,可以期望按行号的顺序得到它们。

但是当您有不同的类别时,编译器可以决定首先要考虑的类别。而且您会看到:与查看变量和范围界定相比,在方法中识别错误修饰符要容易得多。

并注意:在方法主体内的中具有访问修饰符,这是一个语法问题。首先发现并报告纯语法问题是有道理的。 pvInt事情更复杂,那就是语义!编译器需要完全了解类的(静态)字段,然后才能进行检查。