java 编译器从哪一行开始检查编码行
From which line java compiler starts checking the coding lines
编译器以什么顺序java检查程序的行。
是否从第一行开始?还是从主要方法开始?
绝对不是从 main 方法开始(那将是运行时而不是编译时的入口点)。它必须遍历所有行(从 package
语句开始)以检测任何错误。
您混淆了执行和编译,这是两个完全不同的独立进程。
编译器根据在源文件中找到的内容将一个源代码文件转换为一个或多个 .class
文件。这独立于结果代码的执行。没有其他方法可以从文件开头开始,因为源文件的每个其他工件在编译之前都是未知的。在读取文件之前,甚至是行的长度以及除第一行以外的所有行的位置都是未知的。但请注意,编译是一个多步骤过程。在编译过程中的某个时刻,顺序数据被转换为数据结构,典型的是某种 Abstract Syntax Tree,源代码中项目的原始顺序(大部分)与之无关。
Java 应用程序的执行不适用于源代码文件,而是编译后的 class 文件,这些文件未按行组织。如果您在启用调试信息的情况下编译了 classes,将会有关于哪些指令映射到原始源代码行的提示,但除此之外没有与行的连接。 .class
文件有一个必须由 JVM 解析的 binary format。此 可能 从您指定给启动器的主要 class 开始,但通常某些核心 class 像 java.lang.Object
、java.lang.String
或java.lang.Thread
在此之前预加载。
在开始执行 main
方法之前,必须解析 class,这可能包括加载和解析其他引用的 classes,例如主 class 的超级 class。然后,必须初始化主 class,包括执行 class 及其超级 class(es) 的静态初始化程序。 Then,可能会开始执行main
方法。如果有 Java 个代理注册到 JVM,启动过程可能会更加复杂。
编译器以什么顺序java检查程序的行。 是否从第一行开始?还是从主要方法开始?
绝对不是从 main 方法开始(那将是运行时而不是编译时的入口点)。它必须遍历所有行(从 package
语句开始)以检测任何错误。
您混淆了执行和编译,这是两个完全不同的独立进程。
编译器根据在源文件中找到的内容将一个源代码文件转换为一个或多个 .class
文件。这独立于结果代码的执行。没有其他方法可以从文件开头开始,因为源文件的每个其他工件在编译之前都是未知的。在读取文件之前,甚至是行的长度以及除第一行以外的所有行的位置都是未知的。但请注意,编译是一个多步骤过程。在编译过程中的某个时刻,顺序数据被转换为数据结构,典型的是某种 Abstract Syntax Tree,源代码中项目的原始顺序(大部分)与之无关。
Java 应用程序的执行不适用于源代码文件,而是编译后的 class 文件,这些文件未按行组织。如果您在启用调试信息的情况下编译了 classes,将会有关于哪些指令映射到原始源代码行的提示,但除此之外没有与行的连接。 .class
文件有一个必须由 JVM 解析的 binary format。此 可能 从您指定给启动器的主要 class 开始,但通常某些核心 class 像 java.lang.Object
、java.lang.String
或java.lang.Thread
在此之前预加载。
在开始执行 main
方法之前,必须解析 class,这可能包括加载和解析其他引用的 classes,例如主 class 的超级 class。然后,必须初始化主 class,包括执行 class 及其超级 class(es) 的静态初始化程序。 Then,可能会开始执行main
方法。如果有 Java 个代理注册到 JVM,启动过程可能会更加复杂。