目录
1、java编译过程主要分为四步:
- 词法分析
- 语法分析
- 语义分析
- 字节码生成
2、词法分析:
词法分析是将java源代码一个字节一个字节的读出来,根据关键字,分辨出符合规范的Token流。也就是把一段代码分解成一个个单独的词。
根据这次Token流,编译器完成了理解java语言的第一步。例如:第一个关键字就是public,对应的Token类为:Thken.PUBLIC。同理class关键字对应Token.CLASS。把一句话:我要睡觉,分解为:我 要 睡觉。
3、语法分析:
语法分析器会读取Token流,组建成更加结构化的语法书。也就是将这些Token流中的单词组装成一句话,然后生成一颗语法树。
4、语义分析:
这个阶段就是编译器对代码的各种检查和优化,而实际操作的对象就是生成java简单语法树的节点。
编译器首先对代码进行一些检查,保证代码符合java语言规范,例如:
- com.sun.tools.javac.comp.Check类会检查简单语法树中,变量类型是否正确,方法返回类型是否与接收的引用值匹配等等
- com.sun.tools.javac.Resolve类会检查变量、方法或类的访问是否合法,变量是否是静态变量,变量是否初始化。
同时还有对代码进行一些简单的优化。
5、字节码生成:
生成语法树之后,接下来javac会调用com.sun.tools.javac.jvm.Gen类遍历语法树,生成java字节码:
- 将java 案犯法中代码块转化为符合JVM语法的命令形式。JVM的操作都是基于栈的,所有操作都必须经过出栈和入栈类完成。
- 按照JVM的文件组织格式将字节码输出到以class为拓展名的文件中。
获得JVM字节码后,字节码就可以交个JVM执行了。
更多内容请关注微信公众号“外里科技”
| 官方公众号 | 外里科技 |
| 运营公众号 | 英雄赚 |
| 微信 | wxid_8awklmbh1fzm22 |
| 1247408032 | |
| 开源代码 | https://gitee.com/B_T/beimi |

浙公网安备 33010602011771号