java里面的语法糖(糖衣语法)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20009015/article/details/89414858

语法糖是一种用来方便程序员代码开发的手段,简化程序开发,但是不会提供实质性的功能改造,但可以提高开发效率或者语法的严谨性或者减少编码出错的机会。
总而言之,语法糖可以看作是编译器实现的一种小把戏。

1.泛型和类型擦除
泛型的本质是参数化类型,也就是操作的数据类型本身也是一个参数。这种参数类型可以用在类,接口,方法中,分别叫泛型类,泛型接口,泛型方法。

但是java的泛型是一个语法糖,并非是真实泛型,只在源码中存在,List和List 在编译之后,就是List 并在相应的地方加上了类型转换代码。这种实现方式叫类型擦除,也叫伪泛型。
但是在 C#里面的是真实泛型,List和List就是两个不同的类型。
在java里面 ,如果同一个类的两个方法名称相同,参数分别为List和List,是无法重载的,泛型擦除之后都是 List ,重载需要方法签名不同。

但是,擦除法所谓的擦除,仅仅是对方法的code属性中的字节码进行擦除,实际上元数据中还是保留了泛型信息,这也是我们能通过反射手段获取参数化类型的根本依据。

泛型
在这里插入图片描述
实际上
在这里插入图片描述

2.自动装箱和遍历循环

在这里插入图片描述
实际上
在这里插入图片描述

自动装箱用了Integer.valueOf
for循环用了迭代器

3.变长参数 实际上是数组
在这里插入图片描述

除了泛型,for,可变长参数等语法糖之外
还有内部类,枚举,断言,对枚举和字符串对switch支持,try语句中定义和关闭资源等。

内部类是生成了外部类类名$内部类类名的的类
在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 6232685 查看本文章

枚举
在这里插入图片描述

实际上是继承自称Enum的final类
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_20009015/article/details/89414858