JDK12的五大重要新特性
文章目录
- JDK12的五大重要新特性
- 引入JVM常量API
- 扩展了switch语句
- 支持Unicode 11.0
- 为日本Reiwa Era提供了方形字符支持
- NumberFormat增加了对以紧凑格式格式化数字的支持
JDK12的五大重要新特性
Java12在March 19, 2019发布了。
在2017年发布Java 9之后,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每年的3月和9月都会发布新的版本功能。 从而提供了更细化,更快和可管理的版本更新。
这是一个好消息,不好的就是大家会觉得JDK的版本更新太快了。
什么?JDK12已经出来了?
什么?9月份要出JDK13了?
什么?我还在用JDK8?
废话少说,我们来看下JDK12的五个比较重要的新特性:
- 引入JVM常量API
- 扩展了switch语句
- 支持Unicode 11.0
- 为日本Reiwa Era提供了方形字符支持
- NumberFormat增加了对以紧凑格式格式化数字的支持
引入JVM常量API
每个Java类文件都有一个常量池,该池存储该类中字节码指令的操作。广义上讲,常量池中的条目要么描述运行时artifacts(例如类和方法),要么描述简单值(例如字符串和整数)。
所有这些条目都称为可加载常量,因为它们可以用作ldc指令的参数(“加载常量”)。它们也可能出现在invokedynamic指令的引导方法的静态参数列表中。执行ldc或invokedynamic指令会导致将可加载常量解析为标准Java类型(如Class,String或int)的“实时”值。
处理类文件的程序需要对字节码指令进行建模,然后对可加载常量进行建模。但是,使用标准Java类型对可加载常量进行建模是不够的。
描述一个字符串(一个CONSTANT_String_info条目)的可加载常量可能是可以接受的,因为生成一个“live” String对象是很简单的,但是对于描述一个类(一个CONSTANT_Class_info条目)的一个可加载常量来说,这是有问题的,因为生成一个“live”类对象依赖于类加载的正确性和一致性。
在实际应用中,类加载具有许多环境依赖性和失败的情况,例如:所需的类不存在或请求者可能无法访问;类加载的结果随上下文而变化;加载类具有副作用;有时根本不可能加载类。
因此,处理可加载常量的程序如果能够操纵类和方法,并且以纯名义上的符号形式操纵诸如方法句柄和动态计算的常量之类的artifacts,则它们将变得更加简单。
JDK12在新包java.lang.invoke.constant中定义了一系列基于值的符号引用(JVMS 5.1)类型,它们能够描述每种可加载常量。符号引用以纯字面的形式描述了可加载常量,与类加载或可访问性上下文分开。某些类可以充当自己的符号引用(例如String);对于可链接常量,JDK12定义了一系列符号引用类型(ClassDesc,MethodTypeDesc,MethodHandleDesc和DynamicConstantDesc),来包含描述这些常量的信息。
扩展了switch语句
这是JEP 325提出的一个预览版本的预发特性。现在被JDK13的 JEP 354替代了。
简单点讲就是扩展了switch语法,可以用作语句或表达式。
老的写法:
switch (day) {case MONDAY:case FRIDAY:case SUNDAY:System.out.println(6);break;case TUESDAY:System.out.println(7);break;case THURSDAY:case SATURDAY:System.out.println(8);break;case WEDNESDAY:System.out.println(9);break;
}
新的写法:
switch (day) {case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);case TUESDAY -> System.out.println(7);case THURSDAY, SATURDAY -> System.out.println(8);case WEDNESDAY -> System.out.println(9);
}
还可以有返回值:
int numLetters = switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY -> 7;case THURSDAY, SATURDAY -> 8;case WEDNESDAY -> 9;
};
支持Unicode 11.0
JDK 12版本包含对Unicode 11.0.0的支持。 在支持Unicode 10.0.0的JDK 11发行之后,Unicode 11.0.0引入了JDK 12现在包含的以下新功能:
- 684个新字符
- 11个新blocks
- 7个新脚本。
为日本Reiwa Era提供了方形字符支持
简单点说就是日本朝代更替,造了一个新字(Reiwa 令和)。所以需要Unicode的支持。
Unicode联盟为这个字保留代码:U+32FF。
现在的日本朝代叫:(Heisei 平成)。 是指日本历史的一段时期,对应于明仁天皇从1989年1月8日至至2019年4月30日退位。
他的儿子Naruhito皇太子于5月1日成为新的天皇后,改朝代名为:Reiwa。
NumberFormat增加了对以紧凑格式格式化数字的支持
NumberFormat增加了以紧凑格式格式化数字的支持。 紧凑的数字格式是指数字的简短形式或易于理解的形式。 例如,在en_US语言环境中,根据NumberFormat.Style指定的样式,可以将1000格式化为“ 1K”,将1000000格式化为“ 1M”。 紧凑数字格式由LDML的紧凑数字格式规范定义。 若要获取实例,请使用NumberFormat给出的工厂方法之一来进行紧凑数字格式化。 例如:
NumberFormat fmt = NumberFormat.getCompactNumberInstance(Locale.US,NumberFormat.Style.SHORT);
String result = fmt.format(1000);
上面的示例生成“ 1K”。
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多教程请参考 flydean的博客
JDK12的五大重要新特性相关推荐
- JDK 13 的五大新特性!你最中意哪个?
点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 来源:阿飞的博客 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spring ...
- JDK12的新特性:CompactNumberFormat
文章目录 简介 CompactNumberFormat详解 自定义CompactNumberFormat 解析CompactNumber 总结 JDK12的新特性:CompactNumberForma ...
- JDK12的新特性:teeing collectors
文章目录 简介 talk is cheap, show me the code Teeing方法深度剖析 Characteristics 总结 JDK12的新特性:teeing collectors ...
- 怎么真正入行Web前端行业?JavaScript五大新特性是什么?
怎么真正入行Web前端行业?JS五大新特性是什么?JavaScript是Web开发者必学的三种语言之一,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言.随着互联网的更迭以及技术的革新,Jav ...
- JDK10、JDK11、JDK12新特性
JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...
- php7的核心开发者,php7 五大新特性
2. 函數返回值類型聲明 官方文檔提供的例子(注意 - 的邊長參數語法在 PHP 5.6 以上的版本中才有): functionarraysSum(array...$arrays):array { r ...
- jdk9、jdk10、jdk11、jdk12、jdk13新特性
我们绝大部分人估计都还在用着jdk8,12其实是一个非LTS(long time support)版本,而11与8一样是LTS版,意味着下个通用的版本将从8直接到11,毕竟11包含了9和10的所有新特 ...
- Java EE 8的五大新特性详解
Java EE 8的五大新特性详解 2018.4.3 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载. Java EE 8带来了很多新特性,其中最好的新特性有下面五个. 备受期待的Ja ...
- QGIS 3.20 五大新特性解析
2021年6月18日,经过4个月的开发周期,QGIS发布了最新版(LR)QGIS 3.20,随之一同发布的还有长期稳定版(LTR)QGIS 3.16.8. 相比3.18版为期4天的打包过程,本次打包时 ...
最新文章
- window python输入路径问题--转义字符
- 基于若依框架的二次开发_浅谈若依框架
- netstat和lsof端口结果不一致
- 【数据结构与算法】之深入解析“相交链表”的求解思路与算法示例
- nand ubi -1 nand基础
- IDA+OD双剑合璧=逆向无敌
- SAP CRM呼叫中心toolbar的cancel按钮会导致session清理
- Sharepoint学习笔记—error处理-- The user does not exist or is not unique.
- python3 实现对比conf 文件差异
- 笔记本电脑关机快捷键_2020年双十一值得入手的高性价比笔记本电脑外设推荐...
- Oracle下的Databse,Instance,Schemas
- json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示
- 魔兽美服服务器维护,美服《魔兽世界》低人口密度服务器合并计划最新动态
- 揭秘Android开发效率提升多倍的利器;Gradle
- 125. 如何修改PHP的memory_limit限制
- 硬件测试必需的5个流程,每一个步骤都不能少!
- 【C语言】奥运参赛国出场次序
- python中numpy zeros_为什么numpy.zeros和numpy.zeros的性能不同?
- 【Asp.net入门01】动态网站基础知识
- webpack配置entry详解