1. 编译器
1.1 分类及说明
- 前端编译器:把*.java文件转变为*.class文件
- Javac、ECJ
- 后端运行期编译器(JIT编译器):把字节码(*.class文件)转变为机器码
- HotSpot的C1、C2
- 静态提前编译器(AOT编译器):把*.java文件编译成本地机器代码
- GCJ
2. Java语法糖(编译器优化)
![6841a9dbe91a13832e569c1cd92627a2.png](https://i-blog.csdnimg.cn/blog_migrate/3055b4cfda4de4ffb62c7fc3712314e3.png)
2.1 默认构造器
public class Candy{
}
编译成class后的代码:
public class Candy{
//这个无参构造是编译器加上的
public Candy(){
super(); //调用父类Object的无参构造方法
}
}
2.2 自动拆装箱
public class Candy{
public static void main(String[] args){
Integer x = 1;
int y = x;
}
}
编译成class后的代码:
public class Candy{
public static void main(String[] args){
Integer x = Integer.valueOf(1); //编译器自动装箱
int y = x.intValue(); //编译器自动拆箱
}
}
2.3 泛型集合取值
public class Candy{
public static void main(String[] args){
List list = enw ArrayList<>();
list.add(10); //实际调用的是 list.add(Object o)