前端编译与优化
Javac 编译器
在JDK6
以前,Javac
并不属于标准Java SE API
的一部分,它实现代码单独存放在tools.jar
中,
要在程序中使用的话就必须把这个库放到类路径上。在JDK6
发布时通过了JSR 199
编译器API
的提案,
使得Javac
编译器的实现代码晋升成为标准的Java
类库之一。(可以少配个路径)
Javac 编译过程
- 准备过程:初始化插入式注解处理器(
Lombok
就是依靠编译器注解处理的标准API
实现的) - 解析与填充符号表过程
- 词法、语法分析。将源代码的字符流转变为标记集合,构造出抽象语法树
- 填充符号表。产生符号地址与符号信息
- 插入式注解处理器的注解处理过程
- 分析与字节码生成
- 标注检查。对语法的静态信息进行检查
- 数据流及控制流分析。对程序动态运行过程进行检查
- 解语法糖。将简化代码编写的语法糖还原为原有的形式
- 字节码生成。将前面各个步骤所生成的信息转化成字节码
Java 语法糖
泛型
Java
实现泛型采用了类型擦除的方式,编译后所有泛型都变为裸类型(Raw Type
)ArrayList list; // 裸类型
自动装箱、拆箱与遍历循环
条件编译