JDK12的五大重要新特性

Java12在March 19, 2019发布了。

在2017年发布Java 9之后,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每年的3月和9月都会发布新的版本功能。 从而提供了更细化,更快和可管理的版本更新。

这是一个好消息,不好的就是大家会觉得JDK的版本更新太快了。

什么?JDK12已经出来了?

什么?9月份要出JDK13了?

什么?我还在用JDK8?

废话少说,我们来看下JDK12的五个比较重要的新特性:

  1. 引入JVM常量API
  2. 扩展了switch语句
  3. 支持Unicode 11.0
  4. 为日本Reiwa Era提供了方形字符支持
  5. 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”。

更多教程请参考 flydean的博客

JDK12的五大重要新特性的更多相关文章

  1. JDK10、JDK11、JDK12新特性

    JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...

  2. PHP7的五大新特性

    如果你使用的是基于 composer 和 PSR-4 的框架,这种写法是否能成功的加载类文件?其实是可以的,composer 注册的自动加载方法是在类被调用的时候根据类的命名空间去查找位置,这种写法对 ...

  3. PHP 7 的五大新特性

    1. 运算符(NULL 合并运算符) 把这个放在第一个说是因为我觉得它很有用.用法: $a = $_GET['a'] ?? 1; 它相当于: <php $a = isset($_GET['a'] ...

  4. atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性

    atitit.Servlet2.5 Servlet 3.0 新特性 jsp2.0 jsp2.1 jsp2.2新特性   1.1. Servlet和JSP规范版本对应关系:1 1.2. Servlet2 ...

  5. Java 新特性(5) - Java EE 5 新特性

    Java EE 5 由 Java Community Process 通过 Java Specification Request 244 发布,这个 “总纲” JSR 指出了详细描述 Java EE ...

  6. JDK8到JDK12各个版本的重要特性整理

    JDK8新特性 1.Lambda表达式 2.函数式编程 3.接口可以添加默认方法和静态方法,也就是定义不需要实现类实现的方法 4.方法引用 5.重复注解,同一个注解可以使用多次 6.引入Optiona ...

  7. jdk11新特性

    JDK 11主要特性一览 jdk11即将在9月25号发布正式版.确定的新特性包括以下17个 181 嵌套类可见性控制 309 动态文件常量 315 改进 Aarch64 Intrinsics 318 ...

  8. JDK14发布了,快来看看有什么新特性吧

    序言

  9. 一文带你看遍 JDK9~14 的重要新特性!

    Java9 发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化其中最重要的改动是 Java 平台模块系统的引入,其他还有诸如 ...

随机推荐

  1. H - 覆盖的面积(线段树-线段扫描 + 离散化(板题))

    给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1 ...

  2. 我是如何从通信转到Java软件开发工程师的?

    我的读者里面有绝大部分都是在校学生,有本科的,也有专科的,我在微信里收到很多读者的提问,大部分问题都跟如何学习编程有关,有换专业自学的.有迷茫不知道如何学习的.有报培训班没啥效果的等等,我能感受到他们 ...

  3. ClickHouse学习系列之三【配置文件说明】

    背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.在介绍了安装和用户权限管理之后,本文对其配置文件做下相关的 ...

  4. 3D城市

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. API网关--Kong的实践

    1. 什么是Kong 目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统.如果让每一个后台系统都实现鉴权.限流.负载均衡.审计等基础功能是不合适的,通用的做法 ...

  6. Java中如何通过try优雅地释放资源?

    时间紧迫,长话短说,今天,小明给大家同步一个知识点,使用try-with-resources来优雅地关闭资源. 1. 背景 其实,在JDK 7就已经引入了对try-with-resources的支持, ...

  7. Java第十六天,list接口

    List接口 1.三大特点: ① 有序.② 有索引. ③ 允许存在重复元素. 注意: ① 利用list接口的索引执行操作时,要防止索引越界引起的程序错误. 2.基本使用: 针对List接口有索引的特点 ...

  8. 数据结构和算法(Golang实现)(4)简单入门Golang-结构体和方法

    结构体和方法 一.值,指针和引用 我们现在有一段程序: package main import "fmt" func main() { // a,b 是一个值 a := 5 b : ...

  9. Floyd-例题-实现-我的第一篇博客

    https://www.cnblogs.com/lbssxz/p/11014911.html 这是网上看到的题目,以上是原博主的解答和题目来源(没找到别的题目来源) 题目大意: 城市交通费 [问题描述 ...

  10. Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(一)之Introduction

    Learn Java I found out that I and other speakers tended to give the typical audience too many topics ...