jvm 语法糖

狂风中的少年 提交于 2020-03-24 15:23:49
jvm 语法糖主要包括:
 
1. 泛型 相同擦除类型参数,返回值不同也可以编译成功, 对比方法重载矛盾。
    原因:class文件格式中,只要描述符不是完全一致的两个方法就可以共存。
    擦除:擦除方法code属性中字节码擦除,元数据还保留在泛型中,可以通过反射获取参数化类型。
 
3. 装箱拆箱:Integer.valueOf(),Integer.intValue()
 
4. for循环,把遍历循环代码还原成了迭代器实现,因此需要被遍历的类实现Iterable接口。
 
5. 变长参数:调用的时候变成了数组类型参数。
 
6. 条件编译:使用条件为常量的if语句,根据布尔常量值的真假,编译器会把分支中不成立的代码块消除(接触语法糖阶段)
    java语言编译方式:将所有编译单元语法书顶级节点输入到待处理列表再进行编译,各个文件之间能相互提供符号信息。
 
7. 内部类 
    Java的内部类也是一个语法糖,它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。
内部类分为四种:成员内部类、局部内部类、匿名内部类、静态内部类。
 
8. 枚举类
    在JVM字节码文件结构中,并没有“枚举”这个类型。Java的枚举类型,会在编译期被编译成一个普通了类。
 
9. 字符串的switch支持:
    switch string条件判断 实际上是对string.hashCode的判断
 
switch(key.hashCode()) {
    case 49:
        if(key.equals("1")) {
            var2 = 0;
        }
    break;
case 50:

 

其它还有如断言语句,try语句中定义和关闭资源等。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!