语法糖
在JAVA语法中添加一些新语法,方便程序员使用,语法糖是不被JVM识别的,当对语法糖反编译后,会被还原为简单的基础语法结构,这样JVM才能识别,这个过程叫解语法糖(desugar)
语法糖一,switch支持String与枚举
通过String的hashCode和equals方法实现,先计算case中的字符串的hashCode,然后判断字符串是否equals case中的字符串
语法糖二,泛型
虚拟机中没有泛型,只有普通类和普通方法,所有泛型类的类型参数都会在编译期被擦除,泛型类没有Class对象,比如:不存在List.class,只有List.class
语法糖三,自动装箱
装箱,自动将原始基础类型的值转换为类型对象,通过valueOf(xx)方法实现
语法糖四,可变参数
新生成数组,然后将可变参数赋值到数组中,然后在将数组当做参数进行传递
语法糖五,枚举
当定义一个枚举时,编译期会自动定义一个final的类型,并继承Enum类
语法糖六,内部类
当定义一个内部类,编译成功后会生成outer.class 和 outer$inner.class,仅仅是一个编译期的概念
语法糖七,条件编译
boolean debug = false
if (debug) {
println("it is debug mode")
}
编译后,以上代码会被过滤,反编译代码没有以上代码,可以理解为无用代码
语法糖八,断言
当编译断言语句时,是通过if else 判断,如果断言语句为true,则代码往下执行,否则抛出AssertError打断程序执行
语法糖九,数值字面量
在Java7中,数值变量可以添加下划线,增强可读性
int a = 100_00;
// 反编译后,int a = 10000;
语法糖十,for each
通过普通的for和iterator实现
语法糖十一,try with resource
try(BufferedReader br = new BufferedReader(new FileReader("xxxx"))) {
} catch(IOException e) {
// 处理异常
}
没有关闭资源的操作,编译器都会帮助关闭,无需在finally中关闭
语法糖十二,lambda表达式
简洁代码编写
参考资料
Hollis 大神的《2023全新Java面试宝典课程,八股文学习资料》