6 语法糖

所谓的 语法糖,其实就是指 java编译器把 *.java 源码编译为*.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算是 java 编译器给我们的一个额外福利(给糖吃嘛)
注意,以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记。

6.1 默认构造器

image-20230322232642940

6.2 自动拆装箱

6.3 泛型集合取值

泛型的定义只会在编译阶段检查,在实际的运行阶段,都是使用的Object

6.4 泛型反射

image-20230323193846704

这里的泛型并没有被擦除

可以通过反射拿到这些信息

image-20230323194001591

输出:

image-20230323194031968

6.5 可变参数

image-20230323194252938

...代表数组

6.6 foreach循环

image-20230323194400825

集合的循环

image-20230323201653459

6.7 switch字符串

image-20230323202009936

用equals作用: 防止哈希碰撞

6.8 switch枚举

image-20230323202350469

image-20230323202535390

6.9 枚举类

image-20230323202803361

image-20230323202853733

6.10 try-with-resources

image-20230323203030073

image-20230324160454623

不会丢掉自己抛出的异常

6.11 方法重写时的桥接方法

image-20230324234620395

image-20230324234803171

synthetic bridge 合成方法:允许方法重名,且参数一直,方便该合成方法与父类返回值,名称一致,借此来调用子类方法

验证:

image-20230324235014964

可以看到输出了两个类型的方法名,说明这个类中有两个同名方法test.candy.B.m

因为通常来说

public void load(String a);
public int load(String a);
这两个方法肯定是没办法重载的

有了桥接方法,就可以实现一个类里存放两个同名同参的方法了

6.12 匿名内部类

image-20230325001907123

image-20230325004207292

image-20230325004448831

 posted on 2023-03-27 22:17    阅读(10)  评论(0编辑  收藏  举报