Java源程序如何变成Java字节码?

网友解答: java源程序是开发人员编写的后缀名为.java的文件,而java字节码文件是经过javac编译器编译之后计算机能认识的后缀名为.class的文件。javac做了些什么?主要

网友解答:

java源程序是开发人员编写的后缀名为.java的文件,而java字节码文件是经过javac编译器编译之后计算机能认识的后缀名为.class的文件。

javac做了些什么?

主要由4个模块组成

词法剖析器:识别java中的if,else,for,while等关键字及其语句的合法性,构成符合标准的Token流。

语法剖析器:对构成的Token流进行语法剖析,检查它们构成的组合是否符合java语法标准,构成抽象的语法树。

语义剖析器:将foreach,注解等杂乱的语法转换成最简单的语法,构成注解往后的语法树。

字节码生成器:将注解往后的语法树翻译成字节码。

网友解答: Java源程序和Java字节码的定义

java源程序是指由java语言编写成的以.java结尾的文件,也可以叫做'Java源码'。

java字节码是指由java源码编译之后的以.class结尾的文件,它是一个二进制文件。

Java源程序(源码)如何被编译成Java字节码?

1.javac编译器,这里的Javac编译器称为前端编译器,其他的前端编译器还有诸如Eclipse、JDT中的增量式编译器ECJ等。

2.相对应的还有后端编译器,它主要是在程序运行期间将字节码转变成机器码。

下面我来重点说一下前端编译器javac

Javac编译(前端编译)的过程

1.语法、语词分析

语法语词分析是将源码中的字符流转变为标记(Token)集合,经过这个步骤后,编译器就基本不会再对源码文件进行操作了,后续的操作都建立在抽象语法树之上。

2.填充符号表

符号表是由一组符号地址和符号信息构成的表格。

3.语义分析

语法树能表示一个结构正确的源程序的抽象,但无法保证源程序是符合逻辑的,而语义分析的主要任务是对结构上正确的源程序进行上下文有关性的审查。

4.字节码生成

字节码生成是Javac编译过程的最后一个阶段。

字节码生成阶段不仅仅是把前面各个步骤所生成的信息转化成字节码写到磁盘中,编译器还进行了少量的代码添加和转换工作。

如你写的源码中没有提供任何构造函数,那编译器会自动添加一个没有参数、访问权限与当前类一致的默认构造函数,这个工作其实在填充符号表阶段就已经完成了。

下面附上一张我摘自网络的整个编译过程中的细节图,我只是略知其中一二,具体的细节还待研究,业内高手可以发表评论到下面,我们共同学习,共同进步!

标签: