logo头像

Always believe youself.

JVM-5

编译器处理

语法糖: 就是指java 编译器 把 *.java 源码编译成 *.class 字节码的过程中,自动生成和转换的一些代码,主要是为了减轻程序员的负担,算时java 编译器给我们的额外福利。

默认构造器

编译器帮我们加一个默认的无参的构造器

image.png

自动拆装箱

image.png

泛型集合取值

image.png

java 在编译后执行 泛型擦除, 存 和取 都是 object ,在返回结果时会有结果强制转换。checkcast。

可变参数

  • 可变参数 String… args 其实是一个 String[] args 。java 编译器会在编译期间进行变换。
  • 如果是两个参数,会根据实参的数量进行创建 数组。
  • 如果是无参,foo() 等价为 foo(new String[]{}) ,创建一个空的数据,而不是传递 null 进去。

foreach 循环

image.png

list 使用 iterator ,用 iterator.next()

switch 字符串

image.png

一个switch 会转换为两个 switch,执行两边 switch,第一遍是根据字符串的 hashCode 和 equals 将字符串的转换为相应的 byte 类型,第二遍才是利用 byte 执行进行比较。

为什么第一遍 比较 hashCode 又利用 equals 比较呢? hashCode 是为了提高效率,减少可能的比较,而equals 是防止 hashCode 冲突。

switch 枚举

为配合枚举,生成内部静态类,仅仅对jvm 可见。

try-with-resource

image.png

image.png

为什么要设计一个 addSuppressed(Throwable e)(添加被压制异常)的方法呢?

是为防止异常信息的丢失。多个异常会全部展示。

方法重写的桥接方法

image.png

匿名内部类

image.png

然后:

Runnable runnable = new Candy11$1();

image.png