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的任何特定信息,它可以是obj
或obj.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 新功能
java 新功能_Java 14的新功能相关推荐
- Java 15 正式发布, 14 个新特性,刷新你的认知!!
JDK 15 2020/09/15 如期而至! 这个时间牛逼啊,和苹果发布会同天? OracleJDK 15 发布地址: https://www.oracle.com/java/technologie ...
- java 代码重用_Java 代码重用:功能与上下文重用
我几乎不需要讨论为什么重用代码是有利的.代码重用通常使得程序开发更加快速,并使得 BUG 减少.一旦一段代码被封装和重用,那么只需要检查很少的一段代码即可确保程序的正确性.如果在整个应用程序中只需要在 ...
- java lambda函数_Java SE 8新功能介绍:使用Lambda Expression进行函数式编程
java lambda函数 " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的 ...
- java 1.8新增功能_Java 8的新增功能(第二部分-可能会出现什么)
java 1.8新增功能 免责声明:我不为Oracle工作,也不以任何方式代表Oracle. 此功能列表不是官方的. 作为"局外人",这只是我研究的一部分. 这是由三部分组成的系列 ...
- java web购物车_java web开发——购物车功能实现
之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3 ...
- java 6 新特性_Java SE 6 新特性: HTTP 增强(转)
Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HTTP ...
- java arraylist实现_java实现ArrayList基本功能
本篇介绍手动实现一个ArrayList的基本功能. ArrayList的底层是一个动态数组,这个有别于LinkedList的链表.代码实现了ArrayList的基本功能,所以没有实现ArrayList ...
- java udp聊天_Java UDP实现聊天功能代码
我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,服务器端需要阻塞式等待客户端的连接.而UDP则是可以直接向目的地址的目的端口上发送数据包,由于它只负责发送出去就好,不管 ...
- java上传文件功能_Java MemoryMapped文件的功能
java上传文件功能 Java MemoryMapped文件的功能 在JDK 1.4中,内存映射文件的一个有趣功能被添加到Java中,该功能允许将任何文件映射到OS内存以进行有效读取. 内存映射文件可 ...
最新文章
- 【深度学习】使用transformer进行图像分类
- 今天收到ORACLE 10G OCA 证书!
- Administrator用户被禁用
- 关于数据可视化的思考小结
- IOS15最标准的纯代码搭建项目
- 氮化镓 服务器电源管理系统报价,基于氮化镓的电源解决方案总体拥有成本评估...
- 【Tensorflow】slim.arg_scope()的使用
- 【机器学习-西瓜书】三、逻辑回归(LR);线性判别分析(LDA)
- Sophos 紧急修复已遭利用的防火墙 0day
- Atitit 核心技术有哪些一般 目录 第一章 Rest调用交互	2 第二章 	2 第三章 Cmd调用交互	2 第四章 	2 第五章 爬虫技术	2 第一节 Httpclient	2 第二节 Html
- mysql的replication(主从同步)总结
- 计算机四级 信息安全工程师——计算机网络题库
- mongodb查询某个字段数据
- Linux 命令系统性学习
- 如何把pdf转换成excel呢?
- idea easyYapi插件导入yapi接口使用及踩坑记录
- bzoj 4408: [FJOI2016]神秘数 主席树
- linux查询网卡是百兆还是千兆,查看网卡是百兆还是千兆
- JAVA 设计模式(三)—— 设计模式之工厂模式
- 网络工程师的python之路pdf_网络工程师的Python之路---Ansible篇
热门文章
- [ZJOI2014] 璀璨光华(bfs建图 + dfs搜索)
- CF1444C Team-Building(可持久化并查集)(二分图)
- nssl1487-图
- P1063-能量项链【区间dp】
- jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】
- Stack(nowcoder 11253-K)
- java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)
- Spring Boot中mapper包所放位置的配置
- 3班的第一次模拟面试
- java中判断数组中元素出现的次数