zoukankan      html  css  js  c++  java
  • 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语句中定义和关闭资源等。

  • 相关阅读:
    DSP 知识点
    JVM中的垃圾收集
    MyBatis中的命名空间namespace的作用
    Gradle各版本下载地址
    redis学习笔记
    Mybaties 的缓存
    zookeeper配置集群报错Mode: standalone
    ZooKeeper 典型应用场景
    Linux下搭建mongDB环境
    关系型数据库三范式
  • 原文地址:https://www.cnblogs.com/niejunlei/p/7809294.html
Copyright © 2011-2022 走看看