Moh*_*sal 3 java compiler-construction compiler-errors
我有一个片段
class T{
int y;
public static void main(String... s){
int x;
System.out.println(x);
System.out.println(y);
}
}
Run Code Online (Sandbox Code Playgroud)
这里有两个错误,但在编译时为什么只显示一个错误?
显示的错误是:
non-static variable y cannot be referenced from a static context
System.out.println(y);
^
Run Code Online (Sandbox Code Playgroud)
但是这个错误呢
variable x might not have been initialized
System.out.println(x);
^
Run Code Online (Sandbox Code Playgroud)
@Greg Hewgill钉了它.
特别是,对变量进行初始化,声明异常,无法访问的代码以及其他一些事情的检查会在稍后的过程中发生.如果早期传递中存在错误,则不会运行此传递.
这是有充分理由的.较早的过程构造一个装饰的解析树,代表编译器理解它的程序.如果之前有错误,那么该树将无法准确表示程序,因为开发人员可以理解它.(它不可能!).如果编译器继续运行后来的传递以产生更多的错误消息,很可能很多错误消息会误解错误的解析树的工件.这只会让开发人员感到困惑.
无论如何,这是大多数编程语言的大多数编译器工作的方式.修复一些编译错误可能导致其他(以前未报告的)错误浮出水面.