Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java编译器从哪一行开始检查编码行_Java_Compiler Construction - Fatal编程技术网

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

java编译器从哪一行开始检查编码行,java,compiler-construction,Java,Compiler Construction,java编译器按什么顺序检查程序的行。 是否从第一行开始?还是从主要方法开始 肯定不是从main方法开始的(那将是运行时的入口点,而不是编译时的入口点)。它必须遍历所有行(从package语句开始)以检测任何错误。您将执行和编译混为一谈,这是两个完全不同、独立的过程 编译器根据在源文件中找到的内容,将源代码文件转换为一个或多个.class文件。这独立于结果代码的执行。没有其他方法可以从文件的开头开始,因为在编译之前,源文件的所有其他工件都是未知的。甚至在读取文件之前,行的长度以及除第一行之外的所

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

肯定不是从main方法开始的(那将是运行时的入口点,而不是编译时的入口点)。它必须遍历所有行(从
package
语句开始)以检测任何错误。

您将执行和编译混为一谈,这是两个完全不同、独立的过程

编译器根据在源文件中找到的内容,将源代码文件转换为一个或多个
.class
文件。这独立于结果代码的执行。没有其他方法可以从文件的开头开始,因为在编译之前,源文件的所有其他工件都是未知的。甚至在读取文件之前,行的长度以及除第一行之外的所有行的位置都是未知的。但请注意,编译是一个多步骤的过程。在编译过程中的某个时刻,顺序数据被转换成一种数据结构,典型的是某种类型的数据结构,对于这种结构,源代码中项目的原始顺序(大部分)是不相关的

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


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

如果从第一行开始,Java编译器如何知道是否实现了Abstract方法,如果实现是在声明之前给出的?如果从第一行开始,如果实现是在声明之前给出的,java编译器如何知道是否实现了Absact方法?您认为,编译器如何从主方法开始?在编译之前,它不知道是否存在一个主方法,以及在哪行中。考虑u在同一个java文件中有抽象类及其实现类。实现类被放置在我的java文件的起始位置,在后面的部分中我定义了抽象类。随着编译器一行一行地出现,编译器将如何再次返回实现?我只是想知道执行的流程