jvm 语法糖
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语句中定义和关闭资源等。