浅析JDK12的五大重要新特性(推荐)

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”。

总结

到此这篇关于JDK12的五大重要新特性的文章就介绍到这了,更多相关jdk12 新特征内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JDK14性能管理工具之jstack使用介绍

    在之前的文章中,我们介绍了JDK14中jstat工具的使用,本文我们再深入探讨一下jstack工具的使用. jstack工具主要用来打印java堆栈信息,主要是java的class名字,方法名,字节码索引,行数等信息. jstack的命令格式 Usage: jstack [-l][-e] <pid> (to connect to running process) Options: -l long listing. Prints additional information about lock

  • JDK14性能管理工具之Jconsole的使用详解

    我们在开发java项目的时候,或多或少都会去用到Java的性能管理工具.有时候是为了提升应用程序的性能,有时候是为了查找java应用程序的bug. 性能监控和调试工具在英文中叫做profile tool,提起这种工具大家可能会想到一些非常出名的jprofile等收费工具,其实JDK也自带了一些性能调试工具,比如JMC和Jconsole. JMC现在已经和JDK的版本独立出来了,详情请参考我之前的文章: JDK 14的新特性:JFR,JMC和JFR事件流 ,今天我们将会重点讲解Jconsole的使

  • 在windows环境下安装jdk8、jdk9、jdk11、jdk12并自由切换

    在windows环境下安装jdk8.jdk9.jdk11.jdk12并自由切换在windows下安装jdk的各个版本安装各个版本的jdk,并设置安装路径配置环境各个版本的环境变量设置JAVA_HOME设置path切换jdk版本 在windows下安装jdk的各个版本安装各个版本的jdk,并设置安装路径 jdk8安装在C:\ProgramFile\Java jdk11安装在C:\ProgramFile\Java jdk12安装在C:\ProgramFile\Java jdk9安装在C:\Java9

  • JDK12的新特性之CompactNumberFormat详解

    简介 JDK12引入了新的格式化数字的类叫做CompactNumberFormat.主要方便我们对很长的数字进行简写.比如1000可以简写为1K或者1 thousand. 本文将会讲解CompactNumberFormat的基本构成和使用方法,最后在实际的例子中结束文章的讲解. 更多内容请访问www.flydean.com CompactNumberFormat详解 CompactNumberFormat做为格式化数字的一部分是NumberFormat的子类.作用就是将数字进行格式化.要想构建一

  • Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)

    简介 Java Flight Recorder(JFR)是JVM的诊断和性能分析工具.它可以收集有关JVM以及在其上运行的Java应用程序的数据.JFR是集成到JVM中的,所以JFR对JVM的性能影响非常小,我们可以放心的使用它. 一般来说,在使用默认配置的时候,性能影响要小于1%. JFR的历史很久远了.早在Oracle2008年收购BEA的时候就有了.JFR一般和JMC(Java Mission Control)协同工作. JFR是一个基于事件的低开销的分析引擎,具有高性能的后端,可以以二进

  • JDK12的新特性之teeing collectors

    简介 JDK12为java.util.stream.Collectors添加了一个新的teeing方法,怎么翻译呢?看到很多人都把它翻译成"发球台",我不禁潸然泪下,哪里有那么复杂,tee就是T.它的作用就像是一个T型,数据从两头进入,然后从一头流出.teeing的作用也就在此. talk is cheap, show me the code 我最喜欢的就是一言不合上代码,文字的描述总是让人有点摸不着头脑,程序员还是要用程序说话.有了程序就有了逻辑,有了逻辑一切都有了. 各大网站上的例

  • 浅析JDK12的五大重要新特性(推荐)

    JDK12的五大重要新特性 Java12在March 19, 2019发布了. 在2017年发布Java 9之后,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能.现在,每年的3月和9月都会发布新的版本功能. 从而提供了更细化,更快和可管理的版本更新. 这是一个好消息,不好的就是大家会觉得JDK的版本更新太快了. 什么?JDK12已经出来了? 什么?9月份要出JDK13了? 什么?我还在用JDK8? 废话少说,我们来看下JDK12的五个比较重要的新特性: 引入JVM常量AP

  • Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)

    译者前言:相信凡是用过 zip() 内置函数的人,都会赞同它很有用,但是,它的最大问题是可能会产生出非预期的结果.PEP-618 提出给它增加一个参数,可以有效地解决大家的痛点. 这是 Python 3.10 版本正式采纳的第一个 PEP,「Python猫」一直有跟进社区最新动态的习惯,所以翻译了出来给大家尝鲜,强烈推荐一读.(PS:严格来说,zip() 是一个内置类(built-in type),而不是一个内置函数(built-in function),但我们一般都称它为一个内置函数.) PE

  • 深入浅析JDK8新特性之Lambda表达式

    第一次是接触Lambda表达式是在TypeScript中(JavaScript的超集中),当时是为了让TypeScript的this方法外而不是本方法内所使用的.使用过后突然想到Lambda不是JDK8的重量级新特性么?于是感觉查阅相关资料并记录下来: 一. 行为参数化 行为参数化简单的说就是函数的主体仅包含模板类通用代码,而一些会随着业务场景而变化的逻辑则以参数的形式传递到函数之中,采用行为参数化可以让程序更加的通用,以应对频繁变更的需求. 考虑一个业务场景,假设我们需要通过程序对苹果进行筛选

  • 浅析C# 9.0 新特性之 Lambda 弃元参数

    大家好,这是 C# 9.0 新特性短系列的第 5 篇文章. 弃元(Discards) 是在 C# 7.0 的时候开始支持的,它是一种人为丢弃不使用的临时虚拟变量.语法上它是用来赋值的,但它却不被分配存储空间,即没有值,所以不能从中读取值.弃元用 _(下划线) 表示,下划线是一个关键字,只能赋值,不能读取,例如: 在 C# 7.0 中,弃元的使用场景主要有下面四种: 元组和对象的解构 使用 is 和 switch 的模式匹配 对具有 out 参数的方法的调用 作用域内独立使用场景 针对这几个场景,

  • Typescript3.9 常用新特性一览(推荐)

    更新什么?概况一览 1.优化了 Promise.all 的定义,在 3.7 版本中一些混用 null 或 undefined 的时候的问题已经在 3.9 得到了修复. 2.大大的提高了打包速度,微软团队自测的时候 typescript项目的平均编译时间由 26s 缩短到了 10s 左右. 3.// @ts-expect-error 新注释的添加 4.在条件语句中检测未调用的函数 5.编辑器提升 5.1 在 JavaScript 中 CommonJS 的自动引入 5.2 在代码操作的时候正确的保留

  • golang1.16新特性速览(推荐)

    golang1.16也在今天正式发布了. 原定计划是2月1号年前发布的,不过迟到也是golang的老传统了,正好也趁着最后的假期快速预览一下golang1.16的新特性吧. 语言內建的资源嵌入支持 之前市面上已经有很多把今天文件嵌入golang二进制程序的工具了,这次golang官方将这一功能加入了embed标准库,从语言层面上提供了支持. 我之前以及写了embed的使用教程,可以看这里. 这儿还有一篇官方推荐的教程. 支持arm64 m1芯片可谓是最近的焦点,golang自然也不会落下. 在g

  • Vue.js 2.5新特性介绍(推荐)

    TypeScript TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.2012年十月份,微软发布了首个公开版本的TypeScript,在2013年6月19日,微软发布了TypeScript 0.9的正式版本,到目前为止,TypeScript已发展到2.x版本 安装TypeScript 安装TypeScript主要有两种方式: 通过npm方式安装(Node.js包管理器) 安装TypeS

随机推荐