目录
1概述
三类编译器
2Javac编译器
(前端编译器)
2.1解析与填充符号表
2.1.1词法、语法分析
词法分析:将源代码的字符流转变为标记(Token)集合
语法分析:根据Token序列构造抽象语法树的过程
2.1.2填充符号表
符号表是由一组符号地质和符号信息构成的表格。
(暂时没看懂)
2.2注解处理器
待补充
2.3语义分析与字节码生成
2.3.1标注检查
2.3.2数据及控制流分析
2.3.3解语法糖
泛型、变长参数、自动拆/装箱
2.3.4字节码生成(<cinit>和<init>)
总结一下
在字节码生成阶段,编译期会将实例构造器<init>和类构造器<cinit>方法添加到语法树中。
- <cinit>
收敛顺序为(参考类加载的初始化阶段)源文件中出现的顺序。
ps:静态语句块只能访问定义在它之前的变量,之后的变量不能访问但能赋值。
- <init>
收敛顺序为
1. 父类变量初始化
2. 父类代码块
3. 父类构造函数
4. 子类变量初始化
5. 子类代码块
6. 子类构造函数
3Java语法糖
3.1泛型与类型擦除
3.2自动装箱、拆箱与遍历循环
3.3条件编译
4实战: 插入式注解处理器
使用了访问者模式