美文网首页
Java语法糖

Java语法糖

作者: 沐兮_d64c | 来源:发表于2019-05-30 13:31 被阅读0次

1,概念

1)语法糖Syntactic Sugar 糖衣语法,方便开发人员使用,JVM并不识别,会在编译阶段解语法糖,还原为基础语法。
2)com.sun.tools.javac.main.JavaCompiler中的deSugar方法,负责解语法糖的实现。
3)常见的语法糖有泛型、变长参数、条件编译、自动拆装箱、内部类等。

2,具体实现

1)switch从1.7支持String和enum类型。
首先对编译器,switch关键字只能使用整型,如byte、char、short、int等。
字符串的switch是通过equals()和hashCode()方法来实现的。

image.png
2)泛型。
jvm中没有泛型,只有普通类型和普通方法,泛型类的类型参数,在编译时都会被擦除。泛型并没有自己独特的Class类型。
类型擦除:如果泛型参数指定了上限,如<T extends Comparable>,移除所有类型参数,替换为顶级的父类型,如果没指定则使用Object。
3)自动装箱、拆箱
装箱使用包装器的valueOf方法,拆箱使用包装器的xxxValue方法。
byte、short、char、int、long、float、double、boolean => Byte、Short、Character、Integer、Long、Fload、Double、Boolean等。
int i = 10;
Integer n = i;自动装箱,反编译class后,Integer.valueof(i)
int j = n;自动拆箱,反编译class后,使用n.intValue()方法
Integer -128 ~127之间有缓存。
4)可变参数
String... strs,反编译后String[] strs,调用时创建String[]数组,传入方法。
5)枚举类型
enum 创建具名值的有限集合。
创建一个enum类型,底层public class MyEnum extend Enum
6)内部类
编译时的概念,编译后生成两个不同的.class文件。Outer.class和Outer$Inner.class
7)数值字面量
整数、浮点数,都允许在数字之间插入任意多个下划线。编译阶段会去掉。
8)for-each
for-each底层使用普通的for循环和迭代器
image.png
9)lambda表达式
lambda的实现,依赖了底层lambda的api。编译阶段糖解,将lambda表达式转换为调用内部api的方式。LambdaMetafactory#metafactory

3,注意点

1)Iterator 在工作的时候是不允许被迭代的对象被改变的。会抛出ConcurrentModificationException异常,可以使用Iterator本身的remove方法。
2)ListItr与Ltr操作expectedModCount避免异常。
使用int cursor;下标索引

image.png
int nextIndex;和Node<E> next;下标
image.png

相关文章

  • 关于语法糖的一些粗鄙之见

    ABCDEFGZ A丨思维逻辑 糖 --> 语法糖 --> 衍生词语 --> java 中的语法糖 --> ...

  • Java语法糖汇总解析

    Java语法糖: 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法...

  • Java语法糖(1):可变长度参数以及foreach循环原理

    语法糖 接下来几篇文章要开启一个Java语法糖系列,所以首先讲讲什么是语法糖。语法糖是一种几乎每种语言或多或少都提...

  • Java中泛型和通配符

    Java中泛型:java语法糖: 语法糖的是一个专业术语,指的是计算机语言中的某一种语法,这个种语法并不会影响语言...

  • Java语法糖

    语法糖(Syntactic Sugar),也称糖衣语法 指在计算机语言中添加的某种语法,这种语法对语言本身功能来说...

  • Java 语法糖

    前言 Java 最早诞生于 1995 年,直到现在都还是最热门的语言之一,那么Java 是怎么满足人们提出的各种后...

  • Java语法糖

    语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术...

  • Java 语法糖

    for-each 在编译的时候,会根据真实的集合结构做转换,如果是数组,则转为for循环,如果是list,则转成迭...

  • Java语法糖

    语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin(彼得·兰...

  • JAVA语法糖

    反编译工具 JAD:jad -sjava Test.class 反编译结果为Java源代码或 jad --sour...

网友评论

      本文标题:Java语法糖

      本文链接:https://www.haomeiwen.com/subject/pwlutctx.html