java 新功能_Java 14的新功能

java 新功能

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 新功能

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

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

相关文章

漫画:什么是ConcurrentHashMap

转载自 玻璃猫 程序员小灰————————————————————————前两期我们讲解了HashMap的基本原理,以及高并发场景下存在的问题。没看过的小伙伴可以点击下面链接:漫画:什么是HashMap? 漫画:高并发下的H…

jvm(12)-java内存模型与线程

【0】README0.1)本文部分文字描述转自“深入理解jvm”,旨在学习“java内存模型与线程” 的基础知识;【1】概述1)并发处理的广泛应用是使得 Amdahl 定律代替摩尔定律称为计算机性能发展源动力的根本原因;2)A…

junit mockito_从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范

junit mockito可执行规范是也可以用作设计规范的测试。 通过启用通用语言(在DDD世界中,这也称为无处不在的语言 ),它们使技术和业务团队能够进入同一页面。 它们充当代码的未来维护者的文档。 在本文中,我们将看到一种…

漫画:什么是红黑树

转载自 玻璃猫 程序员小灰————————————二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。下图中这棵树…

jvm(13)-线程安全与锁优化

【0】README 0.1)本文部分文字转自“深入理解jvm”, 旨在学习 线程安全与锁优化 的基础知识; 0.2)本文知识对于理解 java并发编程非常有用,个人觉得,所以我总结的很详细; 【1】概述 【2】线程安…

apache ignite_Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序

apache ignite在上一个博客中,我们为Ignite应用程序创建了Kubernetes部署文件。 在此博客上,我们将在Kubernetes上部署Ignite应用程序。 我将在此使用minikube。 让我们先构建 mvn clean install 我将创建一个简单的Docker映像,因此需要Doc…

什么是AES算法?(整合版)

转载自 玻璃猫 程序员小灰 假设有一个发送方在向接收方发送消息。如果没有任何加密算法,接收方发送的是一个明文消息:“我是小灰” 如果消息被中间人截获到,即使中间人无法篡改消息,也可以窥探到消息的内容,从而暴露了…

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

soapui 测试soap在本系列的第一篇文章中,我们创建了一个基本的身份验证服务,以使用SoapUI进行调用。 因此,在第二篇文章中,我们将逐步演示如何使用此工具成功调用这种服务。 使用SoapUI的1-Basic WCF SOAP –创建新的SOAP项目 首…

如何获得即时编译器(JIT)的汇编代码(linux环境下)

【0】README0.1)本文主要解决如何在linux下获取即时编译器的汇编代码问题;0.2)本文部分内容转自:http://psy-lob-saw.blogspot.jp/2013/01/java-print-assembly.html1)给定java源代码// 单例模式(分析volat…

漫画:什么是SHA系列算法

转载自 玻璃猫 程序员小灰 SHA-1 SHA-1算法可以从明文生成160bit的信息摘要,示例如下: 给定明文:abcd SHA-1摘要:81FE8BFE87576C3ECB22426F8E57847382917ACF SHA-1 与 MD5的主要区别是什么呢? 1.摘要长度不同。 …

apache ignite_Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

apache ignite在之前的一系列博客中,我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中,我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我…

tomcat(1)一个简单的web server

【0】README 0.1)本文部分描述转自“深入剖析tomcat”, 旨在学习 一个简单的web server 的基础知识; 0.2)for complete source code, please visit https://github.com/pacosonTang/HowTomcatWorks/tree/master/chapter1 【1】…

漫画:什么是MD5算法

转载自 玻璃猫 程序员小灰 摘要哈希生成的正确姿势是什么样呢?分三步: 1.收集相关业务参数,在这里是金额和目标账户。当然,实际应用中的参数肯定比这多得多,这里只是做了简化。 2.按照规则,把参数名和参数…

idea快速生成crud_Java / Spring:如何快速生成完整的Swagger文档CRUD REST API

idea快速生成crud作为开发人员,我们在日常生活中经常面临的最繁琐的任务之一就是编写良好且易于理解的文档。 无论我们的文档只有几行来解释功能的核心功能,还是表明系统的来龙去脉的成熟文章都没关系。 重要的是,我们试图通过文档传达的信息…

漫画:如何破解MD5算法

转载自 玻璃猫 程序员小灰 在之前的漫画中,我们介绍了MD5算法的基本概念和底层原理,没看过的小伙伴们可以点击下面的链接:《漫画:什么是MD5算法?》 这一次,我们来讲解如何破解MD5算法。 设MD5的哈希函数是…

自定义类加载器(ClassLoader + URLClassLoader)

【0】README 0.1)本文主要对类加载器进行分析,且 URLClassLoader是 ClassLoader的子类; 0.2)关于如何设置类加载器的加载路径,参见 对servlet容器的补充 【1】URLClassLoader类加载器 1.1)URLClassLoad…

fork/join和线程池_从fork-join /线程池调用的Singelton bean中的访问spring请求范围缓存...

fork/join和线程池问题: 启用了Spring且其范围设置为Request的缓存需要由不在请求范围内的singleton bean访问。 解: Spring使您能够创建缓存,该缓存为请求范围保留数据。 例如 import org.springframework.cache.concurrent.ConcurrentMapC…

tomcat(2)一个简单的servlet容器

【0】README 0.1)本文部分文字转自 “深入剖析Tomcat”,旨在学习 一个简单的servlet容器 的基础知识; 0.2)for complete source code, please visit https://github.com/pacosonTang/HowTomcatWorks/tree/master/chapter2 0…

漫画:什么是Base64算法

转载自 玻璃猫 程序员小灰 ValueChar ValueChar ValueChar ValueChar0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u6215P31f47v63/控制字符&am…

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

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