Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

Java 14于2020年3月17日发布,凌晨六个月它以前的版本根据Java的新版本Cadence。

在本教程中,我们将查看语言版本14的新功能和已弃用功能的摘要

我们还有更多详细的文章在Java 14上这提供了对新功能的深度视图。

2.从早期版本携带的功能

在以前的版本中,java 14中已经过了一些功能。让我们一个接一个地看待他们。

2.1。切换表达式(JEP 361.

首先在JDK 12中作为预览特征引入其中,即使在Java 13中,它们也仅作为预览功能继续。但现在,切换表达式已被标准化,以便它们是开发套件的一部分和包裹

这种有效的意思是,现在可以在生产代码中使用此功能,而不仅仅是在预览模式下由开发人员进行实验。

作为一个简单的例子,让我们考虑一下我们将一周的日子视为工作日或周末的情况。

在此增强之前,我们将其写为:

布尔istodayholiday;切换(日){案例“星期一”:案例“星期二”:案例“星期三”:案例“星期四”:案例“星期五”:istodayholiday = false;休息;案例“星期六”:案例“星期日”:istodayholiday = true;休息;默认值:抛出新的IllegalAlargumentException(“什么是”+日);}

使用切换表达式,我们可以更简洁地编写同样的东西:

Boolean IstodayHoliday = Switch(日){案例“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期五” - >虚假;案例“星期六”,“星期日” - >真;默认值 - >抛出新的IllegalArgumentException(“什么是”+日);};

2.2。文本块(JEP 368.

文本块继续他们的旅程来获得主流升级,仍然可以作为预览功能可用。

除了JDK 13的功能之外,在其第二个预览中更容易使用多行字符串,文本块现在有两个新的转义序列

  • \:表示线的末尾,以便未介绍新的行字符
  • \ s:表示单个空间

例如:

字符串multilein =“快速的棕色狐狸跳过懒狗;懒惰的狗嚎叫大声。”;

现在可以写作:

字符串multilein =“”“快速棕色狐狸跳过一只懒狗; \懒惰的狗嚎叫大声。”“”;

这提高了人眼的句子的可读性,但之后不会添加新行狗;

3.新的预览功能

3.1。模式匹配instanceof.305年

JDK 14引入了模式匹配instanceof.目的是消除样板代码,使开发人员的生活变得一点容易。

要了解这一点,让我们考虑一个简单的例子。

在此功能之前,我们写道:

if(obj instanceof字符串){string str =(string)obj;int len = str.length();// ......}

现在,我们不需要尽可能多的代码来开始使用obj.作为字符串:

if(obj instanceof string str){int len = str.length();// ......}

在未来的版本中,Java将提出与其他构造的模式匹配,如a转变

3.2。记录 (2013年359.

记录被引入以减少数据模型POJO中的重复样板代码。他们简化了日常发展,提高效率,大大减少人为错误的风险

例如,一个数据模型用户ID密码可以简单地定义为:

公共记录用户(int id,string password){};

我们可以看到,我们正在使用新的关键字,记录,这里。这个简单的声明将自动添加构造函数,getter,等于哈希科特toString.我们的方法。

让我们在JUnit中看到这一点:

私有用户User1 =新用户(0,“UserOne”);@test public void gendrecord_whenobjinitialized_thenvaluescanbefetchedwithgetters(){assertequals(0,user1.id());assertequals(“userone”,user1.password());@test公共void whenrecord_thenequalsimplemented(){用户user2 = user1;asserttrue(user1,user2);@test公共void whenrecord_thentostringimplemented(){asserttrue(user1.tostring()。包含(“UserOne”));}

4.新生产功能

除了两个新的预览功能之外,Java 14还发布了一个混凝土生产就绪。

4.1。乐于助人nullpointerexceptions.2013年358年

以前,堆栈跟踪了空指针异常除了在给定文件中的给定行中的某些值为空位,概括了一个故事。

虽然有用,但这些信息仅建议调试一行而不是将整个图片绘制开发人员来理解,只是通过查看日志。

现在Java有使这更容易通过添加能力来指出究竟是什么空值在给定行的代码中

例如,考虑这个简单的片段:

int [] arr = null;arr [0] = 1;

早些时候,在运行此代码时,日志会说:

线程“main”java.lang.nullpointerexception在com.baeldung.myclass.main(金宝搏188体育myclass.java:27)中的例外

但是,鉴于相同的场景,日志可能会说:

java.lang.nullpointerexception:无法存储到int数组,因为“a”是null

正如我们所看到的,现在我们精确地知道哪种变量导致异常。

5.孵化特征

这些是Java团队提出的非最终的API和工具,并为我们提供了实验。它们与预览功能不同,并在包中作为单独的模块提供jdk.incubator.

5.1。外部内存访问API(370年

这是一个新API.允许Java程序以安全有效的方式访问堆外,例如本机内存(如本机内存)。

许多Java库,如MapdB.memcached.访问异物,Java API本身提供了更清洁的解决方案。有了这个意图,该团队提出了这个JEP,作为其已经存在的方法来访问非堆内存的方法 -bytebuffer.API和sun.misc.unsafe.unsafeAPI。

建立在三个主要的抽象之上记忆MemoryAddress.MemoryLayout.,此API是访问堆和非堆内存的安全方法。

5.2。包装工具(JEP 343.

传统上,要提供Java代码,应用程序开发人员将只是发送一个jar文件,即用户应该在自己的JVM内部运行。

然而,用户宁愿预期安装程序,他们双击以安装包在他们的本机平台上,例如Windows或MacOS。

本次数旨在确切地说。开发人员可以使用jlink.要将JDK冷凝到最小所需的模块,然后使用此包装工具创建可作为一个可安装的轻量级图像EXE文件在Windows或a迪姆在麦克斯。

6. JVM / Hotspot功能

6.1。ZGC在Windows上(JEP 365.)和麦克斯(JEP 364.) - 实验

Z垃圾收集器,可扩展的低延迟垃圾收集器,首先以Java 11引入实验特征。但最初,唯一支持的平台是Linux / x64。

在接收到Linux的ZGC的正反馈后,Java 14还将其支持移植到Windows和MacOS。虽然仍然是一个实验特征,但它都设置为生产准备下一个jdk发布

6.2。Numa-Invee G1的内存分配(JEP 345.

与并行收集器不同,迄今未实现非统一的内存访问(NUMA),而不是G1垃圾收集器。

在跨多个套接字中查看其提供单个JVM的性能改进,介绍了JEP,以使G1收集器Numa感知

此时,没有计划将其复制到其他热点收集器。

6.3。JFR事件流(349年

通过这种增强,JDK的飞行记录器数据现在暴露,以便可以连续监控它。这涉及对包装的修改jdk.jfr.Consumer.因此,用户现在可以直接读取或流录制录制数据。

7.弃用或删除功能

Java 14已弃用了几个功能:

  • Solaris和SPARC端口(JEP 362.) - 因为此UNIX操作系统和RISC处理器自过去几年以来并不积极开发
  • parallelscavenge.+Serialold.GC组合(JEP 366.) - 由于这是GC算法的很少使用的组合,并且需要大量的维护工作

还有几个去除:

  • 并发标记扫描(CMS)垃圾收集器(JEP 363.) - 由Java 9弃用,此GC已被G1作为默认GC成功。此外,现在还有其他更有表现的替代方案,例如ZGC和Shenandoah,因此去除
  • pack200工具和API(JEP 367.) - 这些被弃用以在Java 11中删除,现在删除了

结论

在本教程中,我们研究了Java 14的各种Jeps。

在所有,此版本中有16个主要功能,包括预览功能,孵化器,弃用和删除。我们逐一地看待所有这些,以及示例的语言功能。

一如既往,源代码可用在github上

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!