Java 14的新功能

2020年3月17日,Oracle发布了名为Java 14的Java新版本,其中包括许多新功能,工具,安全性,调试和更新的文档方面的改进。 但是,Oracle还向您提供Java的较旧版本,因为它具有向后兼容性,因此您的先前代码仍可以在较旧的版本上运行,并且Java 14的语法与Java 8或9并不是完全不同的,它只是新版本对前一个进行了一些改进。

尽管许多开发人员会花很长时间来更新其Java SE或JDK,但始终建议您及时更新您的工具。 但是,新的更新不会为初学者带来太多的事情,但是更新始终会对大型项目产生影响,大型项目包括具有数千行代码的太多Java文件。

1.下载Java 14

您可以访问Java的官方网站下载Java JDK 14,也可以单击此链接; 这也将带您到下载页面。

您也可以下载任何Java IDE来编写新版本Java的代码。 所有流行的更新Java IDE(例如IntelliJ IDE和Eclipse)都支持Java 14。

2. Java 14的新增功能?

Java 14文档正式解决了超过15种新的增强或更改,其中包括Java语言支持和JDK的最新API。

2.1开关表达式(JEP 361)

但是,经典的C ++或类似C的Switch语句已经在Java中使用,带有一些新功能和选项的新switch表达式在Java 12和13中作为预览引入,但现在我们可以说它是Java 14中的标准。

让我们看一个例子,我们以前是如何在Java 12之前使用Switch语句的

tags.switch (day) {case 1:System.out.println("Let's meet!");break;case 2:break;case 3:System.out.println("Let's meet!"); break;case 4:break;case 5:System.out.println("Let's meet!");break;case 6: break;case 7:System.out.println("It's Sunday we cannot meet today");break;}

Old Switch语句的这种语法存在以下问题:

  • 在这里,对于Case 1, Case 3,Case 5,我们具有相同的行为Case 5,但是我们必须为每个case定义一个特定的case ,这意味着Java switch语句无法提供一种紧凑的方式来编写类似的行为。
  • 对于每个switch case语句,我们必须放置break语句; 如果我们不这样做,那么代码将失败。

2.2 Java 14开关表达式箭头运算符

在Java 14中,我们为Switch语句提供了一种新的语法,称为Switch Expression,在这里,我们获得了一个新的运算符Arrow -> ,它有助于消除break语句,并为switch Expression提供了简洁明了的外观。

Arrow运算符的语法:

case identifier -> statement;

要么

case identifier -> {// statement block ;}

Java 14的开关表达式(箭头运算符)

让我们用新的Java 14 Switch Expression重写上面的Switch语句:

switch (day) {case 1, 3, 5 -> System.out.println("Let's meet!");case 2, 4, 6 -> {// Do nothing}case 7 -> System.out.println("It’s Sunday we cannot meet today");default -> "Not valid";}

在这里您可以看到,借助Java 14箭头运算符,我们消除了break语句,并且在此处使用单行,针对不同情况传递了类似的行为。

2.3 Java 14开关表达式yield运算符

在Java 14中,switch语句具有称为yield的关键字,该关键字充当case语句表达式的return关键字,而switch语句的此功能使其成为Java 14中的switch表达式:

产生语法:

case -> {yield value;}

Java 14的开关表达式(yield语句):

String message = switch (day) {case 1, 3, 5 -> "Let's meet!";case 2, 4, 6 -> {yield "No meeting today";}case 7 -> {yield "It's Sunday we cannot meet today"; }default -> "Not valid";
};

在这里, switch语句将产生一个值,并且该值将存储在message. 我们应该始终覆盖switch语句的可能值,为此,switch表达式应始终具有覆盖非法情况的default语句。

2.4文字区块(JEP,368):

这是Java 14中的一项新功能。 但是,它的预览已经在Java 13中引入。在旧版本的Java中,当我们有一个长字符串,并且想要在字符串之间放置换行符时,我们必须使用“ \n ”换行符转义,并且写一个长字符串也不好看。 Java 14提供了一种替代的方式,可以使用紧凑型内核在多行中写入字符串。

带有字符串的Java旧版本:

String old_java = " This is first line\n" + "This is second line" + "and this is third line\n";

Java 14文本块:

要在Java中编写长的多行字符串,我们使用Text块,该字符串以3个双反引号""" """驻留。

例:

String new_java = """This is the first lineThis is Second Lineand this is the third line""";

在这里,您在字符之间输入的每个空格和换行符也将显示在输出中。

2.5例如Java 14模式匹配(JEP 305)

Java的较早版本中已经存在instanceof语句,但是Java 14提供了一种技术,我们可以使用单行而不是多行将字符串对象类型转换为另一个字符串变量。

使用instanceof进行类型转换的Java旧版本:

Object object_string = "It is a string, but is treated as an object...";if (object_string instanceof String)
{String stringObject = (String) object_string;System.out.println(stringObject.length());
}

Java 14

Object object_string = "It is a string but it treated as an object...";if (object_string instanceof String stringObject)
{System.out.println(stringObject.length())
}

现在,我们无需为类型转换显式编写额外的语句; Java 14中instanceof语句的增强可以在一行内同时键入新变量的收敛。

2.6记录(JEP,359):

在Java 14中,这是一种预览模式,我们可以期望在Java 15中使用完整的标准格式。假设我们想创建某种方式来表示Student详细信息,为此,我们可以创建一个Student类,其中包含一些数据变量,例如Name, age,grades.

class Student 
{public final String name, grades;public final int age;
}

但是这里我们不需要getter和setter。 相反,我们将创建一个构造函数。 创建一个构造函数是一个好习惯,在它的帮助下,我们还可以判断两个Student对象是否引用同一个Student。

class Student {public final String name, grades;public final int age;public Student(String name, int age, String grades){this.name = name;this.age = age;this.grades = grades;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return Objects.equal(student.name, name) == 0 &&Objects.equal(student.grades, grades) == 0 &&Integer.compare(age, student.age);}@Overridepublic int hashCode() {return Objects.hash(name, age, grades);}@Overridepublic String toString() {return "Student{" +"name=" + latitude +", age" + longitude +", grades='" + grades + '\'' +'}';}

在上面的代码中,我们主要关注学生的详细信息,即name, age,grades,但是我们覆盖了诸如构造函数,哈希码,equals和toString之类的方法,但是Java 14提供了可以解析的预览功能record这种样板。

record Student(String name, int age, String grades){}

此处,构造函数,哈希码,equals和toString将由编译器生成,您可以节省很多不必要的代码重写。

2.7有用的NullPointer异常(JEP 358)

它是Java 14中已添加的一项新功能。Java虚拟机引发一个异常,称为NullPointerException(NPE),当代码尝试取消引用空引用时,会发生此异常,并且它是其中的一种。 Java中最常见的异常。

obj.sec_obj.val = 10;

例外:

Exception in thread "main" java.lang.NullPointerExceptionat Npe.main(Npe.java:17)

该示例是在较旧版本的Java上编译的,在这里您可以看到错误消息未提供引用为null的任何特定信息,它可以是objobj.sec_obj

但是Java 14解决了这个问题,并提供了更好的错误消息来调试此语句。

tags.obj.sec_obj.val = 10;

输出:

Exception in thread "main" java.lang.NullPointerException:Cannot read field "val" because "obj.sec_obj" is nullat Npe.main(Npe.java:17)

现在有了新的异常信息,我们可以直接访问代码的sec_obj部分并调试问题。

3.结论

这是Java 14的一些重要新功能,如果您是Java开发人员,则可以在军械库中添加这些功能,其中一些功能已在Java 14中进行了预览,并且某些功能已正确实现。 Java开发人员社区仍在进行升级,下一个更新中还有许多其他更改。 除了这些功能之外,Java 14还引入了许多其他新功能。建议您转到官方文档。 Java JEP并阅读所有官方更新。

4.下载源代码

下载
您可以在此处下载本文的完整源代码: Java 14功能

翻译自: https://www.javacodegeeks.com/java-14-new-features.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机学校教学大纲,中等职业学校计算机应用基础教学大纲

附件4:中等职业学校计算机应用基础教学大纲一、课程性质与任务计算机应用基础课程是中等职业学校学生必修的一门公共基础课。本课程的任务是:使学生掌握必备的计算机应用基础知识和基本技能,培养学生应用计算机解决工作与生活中实际问题的能力…

voms下的反射大师_VOMS旧版

VOMS旧版又叫做虚拟大师,有独立运行的系统,安卓可以支持各种版本,自定义分辨率,应有游戏多开,还有虚拟定位的功能,是用户的好帮手,需要的朋友快来下载吧。VOMS旧版介绍VMOS 是一款运行在安卓上的…

java ssh客户端_简单的Java SSH客户端

java ssh客户端可以使用jcabi-ssh在Java中通过几行代码通过SSH执行shell命令: String hello new Shell.Plain(new SSH("ssh.example.com", 22,"yegor", "-----BEGIN RSA PRIVATE KEY-----...") ).exec("echo Hello, world!&qu…

hbase中的row key_hbase中RowKey的设计规则

在关心到hbase中rowkey设计的时候,说明hbase基本的知识已经了解了。就直接上干货(如果不了解的可以参考我上面一片关于hbase的自我总结的文章,我觉得总结的还是很好的)。如果文章中有错误或是不规范的地方,欢迎随时找我哈rowkey长度原则rowke…

计算机一级上机考试试题题库,2016年计算机一级上机考试题库

2016年计算机一级上机考试题库第1题、 ****** 本套题共有5小题 ******(1)新建文档WDA01.DOC,插入文档WTA01.DOC的内容,将文中所有“星星”替换为“行星”,存储为文档WDA01.DOC。(2)新建文档WDA02.DOC,插入文档WDA01.DOC的内容&…

赞扬精心设计:基于属性的测试如何帮助我成为更好的开发人员

开发人员的测试工具箱就是其中之一,很少保持不变。 可以肯定的是,某些测试实践已被证明比其他测试更有价值,但是,我们仍在不断寻找更好,更快和更具表现力的方法来测试我们的代码。 基于属性的测试 是 Java社区中鲜为人…

docker项目部署 php_「Docker部署PHP+Vue项目」- 海风纷飞Blog

创建Docker映射目录—— vue_demo # Demo项目—— php_vue—— docker-compose.yaml—— nginx———— apps # 项目代码———— conf # nginx配置文件—————— nginx.conf———— log # nginx———— vhost # 虚拟机配…

在美国本科 计算机排名2015,(word)2015年美国大学专业排名汇总-以计算机专业排名为例.doc...

(word)2015年美国大学专业排名汇总-以计算机专业排名为例美国大学经常有一些国内没有的专业,而且由于国情不同,很多在国内的热门专业,在国外可能不是那么“吃香”,另外不是名校的专业就是最好的,可能某个普通大学的专业…

stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...

本期,Lucy制作了九个案例分享给大家,分别为:流水灯、按键LED、数码管、点阵、定时蜂鸣器、NTC温度计、超声波测距仪、光敏RGB灯、氛围灯(红外)Lucy无偿提供全部案例的原理图和部分案例的代码。有需要的朋友先关注并私信我。需要源码私信我&am…

λ演算的语法和语义_λ和副作用

λ演算的语法和语义总览 Java 8添加了诸如lambda和类型推断之类的功能。 这使语言不再那么冗长和简洁,但是它带来了更多的副作用,因为您不必对自己的工作做得那么明确。 Lambda的返回类型很重要 Java 8推断闭包的类型。 一种方法是查看返回类型&#xf…

计算机系统中存储管理是,《计算机操作系统5、存储管理.doc

《计算机操作系统5、存储管理一、选择题1.存储器管理的主要功能是内存分配、地址映射、内存保护和( )。A.2.把逻辑地址转变为内存的物理地址的过程称作( )A. D.重定位3.物理地址对应的是( )。A.…

怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...

0、GET/POST 请求数据在 PHP 中,可以直接通过全局变量 $_GET 和 $_POST 快速获取 GET/POST 请求数据,GET 请求数据主要是 URL 查询字符串中包含的参数,以前面在线论坛项目的群组详情页为例:http://localhost:8080/thread/read?id…

Java 8 –集合sort()方法–按Employe对象(Id,名称,年龄)列出自定义排序示例...

有关在Java中对自定义对象进行排序的完整指南。 Collections.sort()方法基于Comparable或Comparator实现进行排序。 用于对Employee对象进行排序的示例自定义排序 1.简介 在本教程中,您将学习如何在java中对Custom对象进行排序 。 首先&…

删除表报正在使用_U盘拔出要不要点quot;安全删除USB硬件quot;退出?

小U盘,大用处。U盘不仅可以用来存储各种各样的文件,甚至还可以用来制作电脑启动盘、Win to Go系统盘等。直接拔还是点“安全删除”后再拔U盘呢?在用完U盘后,有的会点击电脑右下角“安全删除”才拔,有的则会不管那么多直…

cpu性能测试软件 国际象棋,CPU性能评测软件

作者选择100电脑网推荐配置了解最佳配置看首页电脑CPU的评测软件有很多,一般用户用的鲁大师就是国内家喻户晓比较流行的评测软件,但是鲁大师的权威性一直没有被市场充分肯定。在windows系统出到vista后,windows内置了电脑性能评分&#xff0c…

java 参数命名冲突_Java中的命名参数

java 参数命名冲突创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道。 强化单元测试,然后进行重构。 没有借口,没有屁股。 重构! 使用构建器模式,甚至…

react获取全局_使用react hooks实现的简单全局状态管理

注意,此代码存储库已被弃用,不会再更新维护了.Note that this code repository has been deprecated and will not be updated and maintained.react-simple-global-state-store-hook基于react hooks 和EventTarget 实现的极简全局状态管理 库,可以跨组件共享全局状…

职业规划测试软件,生涯规划常用测试工具

原标题:生涯规划常用测试工具认识自己测试生涯规划关于生涯规划的几个测试上周我们说到中学生很有必要进行生涯规划,在进行生涯规划前,我们需要对自己有一个更清晰、更全面的认识,随着心理学的发展,很多认识自我的测试…

使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分

在这个分为三部分的系列中,我将演示如何使用SoapUI API工具来调用安全的WCF SOAP服务。 第一篇文章将着重于创建将要测试的系统的服务。 第二篇文章将介绍在基本身份验证机制保护的情况下调用它所需的步骤。 在最后一部分中,我将对初始服务稍作更改&…

计算机动画分为关键帧动画和,一个最简单的动画最少有几个关键帧

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。一个最简单的动画至少有两个关键帧,两个关键帧中必须是元件,而且必须是同一个元件。要创建使组合体或文字发生颜色渐变的动画,必须先将它们转换为…