语言类型相关知识总结

144 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

泛型的类型擦除机制

  • Java从1.5开始支持泛型,为类向前兼容,泛型的类型,只在编译期进行安全检查,并不会编译进字节码,更不会保留到运行时;

  • 优势:

    • 向前兼容
      • 老版本的字节码能够在新版本的JVM上运行
      • 老版本的源代码能够通过新版本的编译器编译
    • 通过类型擦除实现泛型,比真实的运行时泛型,更节约内存,方法区的压力更小。

匿名内部类

  • 匿名内部类,持有外部类的引用
    • 以编译器自动生成的成员变量的形式持有
    • 通过编译器自动生成的构造方法传入
    • 匿名内部类,通过这个引用访问外部类的成员变量和方法
  • 匿名内部类,访问外部局部变量时,其实是访问自身的一个成员变量
    • 这个成员变量是编译器自动生成的
    • 这个成员变量由编译器自动生成的构造方法初始化
    • 为了保证这个成员变量和外部局部变量时刻保持一致性,二者必须都是final的

语言中的闭包

image.png

  • 内部作用域 + 访问的外部变量 = 闭包
    • 闭包必须是可引用的
    • 闭包必须是有状态的
  • 闭包的作用
    • 保护私有作用域
    • 保护上下文

闭包 lambda 匿名内部类的关系

image.png

语言编译过程

image.png

词法分析

词法分析:把源码的字符流转化成标记(Token)序列,标记是语言的最小语义单位,包括关键字,标识符,运算符,常数等 例子:

int i= x + y ;

image.png

1.将源码解析成字符流 2.将代码进行分割去掉无意义的字符变成标记流 3.确定标记的类型 4.语法分析

语法分析

语法分析:把标记序列组合成各类语法短句,判断标记序列在语法结构上是否正确,输出树形结构的抽象语法树

image.png

语义分析

结合上下文,检查每一个语法短句,语义是否正确,是否符合语言规范;

检查内容:

  • 数据类型匹配
  • 重复定义检测
  • 访问合法性
  • 静态分析
  • 受检异常
  • 语句可达性
  • 展开语法糖

Kotlin编译过程

image.png