6 语法糖
所谓的 语法糖,其实就是指 java编译器把 *.java 源码编译为*.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利(给糖吃嘛)
注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记。
6.1 默认构造器
6.2 自动拆装箱
6.3 泛型集合取值
泛型的定义只会在编译阶段检查,在实际的运行阶段,都是使用的Object
6.4 泛型反射
这里的泛型并没有被擦除
可以通过反射拿到这些信息
输出:
6.5 可变参数
...代表数组
6.6 foreach循环
集合的循环
6.7 switch字符串
用equals作用: 防止哈希碰撞
6.8 switch枚举
6.9 枚举类
6.10 try-with-resources
不会丢掉自己抛出的异常
6.11 方法重写时的桥接方法
synthetic bridge 合成方法:允许方法重名,且参数一直,方便该合成方法与父类返回值,名称一致,借此来调用子类方法
验证:
可以看到输出了两个类型的方法名,说明这个类中有两个同名方法test.candy.B.m
因为通常来说
public void load(String a);
public int load(String a);
这两个方法肯定是没办法重载的
有了桥接方法,就可以实现一个类里存放两个同名同参的方法了