JAVA语法糖 - Java基础

60 阅读2分钟

语法糖

在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面试宝典课程,八股文学习资料》