java编译器从哪一行开始检查编码行

时间:2015-08-20 12:30:14

标签: java compiler-construction

java编译器以什么顺序检查程序的行。 是否从第一行开始?或从主要方法开始?

2 个答案:

答案 0 :(得分:1)

绝对不是从main方法开始的(在运行时不是编译时的入口点)。它必须遍历所有行(从package语句开始)才能检测到任何错误。

答案 1 :(得分:1)

您正在混合执行编译这两个完全不同的独立流程。

编译器根据源文件中的内容将源代码文件转换为一个或多个.class文件。这与生成的代码的执行无关。没有其他方法可以在文件开头处开始,因为在编译之前源文件的每个其他工件都是未知的。在读取文件之前,甚至行的长度以及因此除了第一行之外的所有行的位置都是未知的。但请注意,编译是一个多步骤的过程。在编译期间的某个时刻,顺序数据被转换为数据结构,典型的某种Abstract Syntax Tree,源代码中项目的原始顺序(大部分)是无关紧要的。

Java应用程序的执行不适用于源代码文件,而是不按行排列的已编译类文件。如果您已经编译了启用了调试信息的类,那么将会有关于哪些指令映射到哪个原始源代码行的提示,但除此之外没有与行的连接。 .class文件有一个binary format,必须由JVM解析。此可能从您为启动器指定的主类开始,但通常会在此之前预先加载某些核心类,如java.lang.Objectjava.lang.Stringjava.lang.Thread

main方法的执行开始之前,必须解析该类,其中可能包括加载和解析其他引用的类,例如,你班级的超级班。然后,必须初始化主类,其中包括执行类的静态初始化程序及其超类。 然后,可以开始执行main方法。如果有JVM注册到JVM,启动过程可能会更复杂。