前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java将持续向“高糖”方向发展,你真的了解Java语法糖吗?

Java将持续向“高糖”方向发展,你真的了解Java语法糖吗?

作者头像
IT大咖说
发布2019-10-22 14:50:46
4340
发布2019-10-22 14:50:46
举报
文章被收录于专栏:IT大咖说

Java语法糖概念

1. 语法糖Syntactic Sugar 糖衣语法,方便开发人员使用,JVM并不识别,会在编译阶段解语法糖,还原为基础语法。

2. com.sun.tools.javac.main.JavaCompiler中的deSugar方法,负责解语法糖的实现。

3. 常见的语法糖有泛型、变长参数、条件编译、自动拆装箱、内部类等。

具体实现

1. switch从1.7支持String和enum类型。

首先对编译器,switch关键字只能使用整型,如byte、char、short、int等。

字符串的switch是通过equals()和hashCode()方法来实现的。

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循环和迭代器

9. lambda表达式

lambda的实现,依赖了底层lambda的api。编译阶段糖解,将lambda表达式转换为调用内部api的方式。LambdaMetafactory#metafactory

注意点

1. Iterato在工作的时候是不允许被迭代的对象被改变的。会抛出ConcurrentModificationException异常,可以使用Iterator本身的remove方法。

2. ListItr与Ltr操作expectedModCount避免异常。

使用int cursor;下标索引

int nextIndex;和Node<E> next;下标

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档