java - 编译错误序列: Static compilation error coming after resolving access modifier error?

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

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

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

最佳答案

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

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

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

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

关于java - 编译错误序列: Static compilation error coming after resolving access modifier error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164008/

相关文章:

java - Eclipse 仅编译引用的类(如何设置 Intellij 来执行相同的操作)

java - 日历月份实例减少了一位

java - libgdx 阶段不绘制拉伸(stretch)图像

haskell - 为什么会收到类型错误?

c++ - C++ 11使用构造函数声明

c - 头文件被包含两次

java - ConcurrentHashMap 构造函数参数?

java - 为什么这个 JavaFX 应用程序看起来与 SceneBuilder 中的应用程序有很大不同?

actionscript-3 - 为什么我在这里出现错误1118?

c++ - 为客户端/服务器编译项目 [链接器错误] undefined reference