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

Java 14的新功能相关推荐

  1. java 新功能_Java 14的新功能

    java 新功能 2020年3月17日,Oracle发布了名为Java 14的Java新版本,其中包括许多新功能,工具,安全性,调试和更新的文档方面的改进. 但是,Oracle还向您提供Java的较旧 ...

  2. Java SE 8新功能介绍:使用新的DateTime API计算时间跨度

    使用Java SE 8新的DateTime API JSR 310-可以实现更清晰,可读且功能强大的编码. Java SE 8,JSR 310 在上一篇文章" 使用Streams API处理 ...

  3. Java SE 8新功能介绍:使用Streams API处理集合

    使用Java SE 8 Streams的代码更干净,易读且功能强大..... 在" Java SE 8新功能介绍"系列的这篇文章中,我们将深入解释和探索代码,以了解如何使用流遍历集 ...

  4. Java SE 8新功能介绍:Lambda的遍历,过滤,处理集合和方法增强

    在" Java SE 8新功能导览"系列的这篇文章中,我们将深入解释并探索代码,以了解如何使用lambda表达式和方法引用 遍历集合 ,并使用谓词接口过滤它们,实现默认方法在接口中 ...

  5. Java SE 8新功能导览:Java开发世界中的重大变化

    与其他专业团队成员一样,我是采用OpenJDK的成员之一,但是从最近8个月开始加入,我们经历了Java SE 8 开发,编译,编码,讨论等各个阶段,直到将其付诸实践为止. . 它于2014年3月18日 ...

  6. Java Web学习总结(41)——Java EE 8 新功能展望

    Java EE 7简介 Java EE 作为一个企业应用的部署平台,具有很好的健壮性.能够提供强大的 Web 服务且非常易于部署.这些年来,通过其不断发展,它已大大简化了以服务器为中心的应用程序的开发 ...

  7. java联接pg库_Java14:使用Java 14的新记录联接数据库表

    java联接pg库 您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它. 我们将 ...

  8. Java14:使用Java 14的新记录联接数据库表

    您是否知道可以使用Java 14的预览记录功能将数据库表连接到Java Stream中? 阅读这篇简短的文章,并了解如何使用Speedment Stream ORM完成它. 我们将从如何设置您的项目开 ...

  9. ios设计登录功能_亲爱的产品设计师,这是iOS 14的新功能

    ios设计登录功能 On June 22, 2020 Apple previewed iOS 14 for the first time. As always there are quite some ...

最新文章

  1. dns (域名系统)
  2. scratch跳一跳游戏脚本_跳一跳游戏:经典跳一跳2微信小游戏,点开既玩
  3. 脐带血要不要保存?看了你就明白!
  4. C语言入门基础之输入和输出
  5. 公共端接正极还是负极_被称为下一代动力电池的固态电池,到底明年还是十年后才能量产?...
  6. signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...
  7. 崩溃!如何面对令人脱发的老代码?
  8. STL不是线程安全的啊
  9. 学习SpringBoot(1)入门及简单的配置
  10. c语言函数调用费波那楔数列,【算法】费波那契数列算法
  11. python函数的参数细节
  12. ps+背景缩放+内容缩放
  13. 本地打印后台处理程序服务没有运行
  14. 保姆级笔记-佳能Canon LBP2900在Win10安装驱动
  15. 玩转PS路径,轻松画logo!
  16. 成考本科计算机找工作有用吗,成人本科学历找工作有用吗 就业困难吗
  17. 6.26 mongoDB是无法find未初始的值的,mongoose的Schema需具象化及个人商品Schema设计,租赁网登录态初次尝试,vue对对象未赋初值的监听,forEach等api深拷贝问题
  18. 我们为何渐渐放弃了自己的梦想?
  19. java mycat reload_MyCAT 1.6 使用reload @@config_all报错
  20. Cisco忘了enable密码怎么办

热门文章

  1. F - Sugoroku2(期望dp)
  2. 【动态规划】拔河比赛 (ssl 1638)
  3. 线段树-Count on a Treap-神题
  4. SpringCloud Ribbon(四)之全局配置与服务配置
  5. 面试官问:为什么 Java 线程没有 Running 状态?我懵了
  6. mybatis更新Blob类型字段要用updateByPrimaryKeyWithBLOBs
  7. Java类加载的那些事
  8. jsoup解析HTML用法小结
  9. 漫画算法:判断2的乘方
  10. Shell入门(三)之字符串