Java 13、14都有哪些新特性?
source link: https://blog.didispace.com/java-13-new-features/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Java 13、14都有哪些新特性?
Java 13在2019年9月发布,这个版本引入的正式可用特性几乎没有,是我认为最无聊的版本之一。所以我们跳过Java 13直接来看Java 14吧。
Switch表达式
我觉得switch
表达式在日常中开发被使用的太少了,不是因为这个关键字和if
比起来太“难”,而是因为它很冗长,而且这种视觉上的噪声容易掩盖那些难以调试的错误,特别是那些break
语句,就像下面这样:
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:
System.out.println(7);
break;
case THURSDAY:
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:
System.out.println(9);
break;
default:
System.out.println(11);
}
一点也不清晰,所以我写Java时通常拒绝使用switch
表达式。
新的switch标签
为了简化switch
,Java在引入了 switch标签case L ->
这样一个特性,如果输入匹配L
,则仅执行标签右侧的代码。我们还建议每个 case
允许多个常量,用逗号,
分隔。之前的代码现在可以写成:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
default -> System.out.println(11);
}
case L ->
switch标签右侧的代码被限制为表达式、代码块或throw
语句。如果我们希望Switch语句有返回值可以这样写:
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> 11;
};
当Switch语句赋值给变量时
default
分支是必须的。
yield 受限标识符
case L ->
右边是一个代码块而且根据case
条件会产生一个值的情况下,根据我们的思维惯性会这样写:
int numLetters = switch (day) {
case WEDNESDAY -> {
System.out.println("day = " + day);
// 错误的写法,会引发编译错误
return 9;
};
default -> 11;
};
你会发现上面的写法通不过编译,这是语境问题,当满足case
条件时并不是返回(return
)一个值的意思,而是产生(yield
)了一个值。所以引入了一个新的受限标识符yield
(注意不是关键字)来处理这个语境问题。
int numLetters = switch (day) {
case WEDNESDAY -> {
System.out.println("day = " + day);
// yield 才是正确的
yield 9;
};
default -> 11;
};
更合理的空指针提示
空指针异常是Java最常见的异常之一,在Java 14之前的空指针异常堆栈信息中只是提示给定行的发生了NullPointerException
,不够直观清晰:
Exception in thread "main" java.lang.NullPointerException
at cn.felord.SomeClass.main(SomeClass.java:17)
现在日志会说明空指针的具体来源:
Exception in thread "main" java.lang.NullPointerException: Cannot store to int array because "arr" is null
at cn.felord.SomeClass.main(SomeClass.java:17)
我们可以明确地知道arr
为null
导致了空指针。
其它的一些变更
由于一些预览特性并没有转正,甚至在未来可能移除,所以这里不再进行详细的说明。感兴趣的可以到Java 14发行日志[1]页面查看。多多关注,点赞,转发,评论,后续为大家带来更多有价值的内容输出。
[1] Java 14发行日志: https://openjdk.java.net/projects/jdk/14/
原文链接:https://mp.weixin.qq.com/s/gob7PAN-21bO23CDAB8cSg
版权归作者所有,转载请注明作者、原文、译者等出处信息
Recommend
-
172
双十一商家都有哪些运营手段来刺激你买买买?运营研究社·2017-10-24 06:56数学不好的人请远离双 11,看完这篇文章你会发现再机智,一不小心就进入买买买的...
-
149
macOS 上都有哪些既免费、又实用的工具?| 新手问号
-
85
-
90
-
2
Java 17 是Java 最重要的一个LTS版本之一,但是直接从Java 8 过渡到Java 17跨度太大了,势必有些困难。所以胖哥抽时间梳理了一下从Java 9到Java 17的一些常用API的变动。今天先来看看Java 9 都有什么东西。 Java 9Java 9 最大的变化就是引入了...
-
5
Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。今天我们接着在Java 9 到 Java 17系列文章中来认识针对普通开发者的Java 11。 字符串API增强在Java 11中,针对String的操作进一步得到加强。避免我们在...
-
4
在上一篇我们对Java 9的新特性进行了一些回顾,今天接着来看看Java 10带来了什么特性。之所以需要把Java 8 到Java 17的特性归纳一遍,因为Java社区对Java 17的重视程度前所未有。话不多说,让我...
-
5
上一篇说完了Java11的新特性,本篇接着说一下Java12.Java 12 对开发者有用的特性并不是特别多,不过实用性还是有的。 字符串增强Java 12 进一步对字符串操作进行增强,增加了...
-
4
从 2018 年 2 月 28 号发布 Spring Boot 2.0 版本开始,整个 2.X 版本已经经过了 4 年多的时间,累计发布了 95 个不同的版本,而就在前不久,2.X 系列的也已经迎来了他的最终版本:2.7。 前几天我还写了一篇关于 Spring Boot 从 2.1 版本升级到 2.7 的文章,...
-
1
视频来自YouTube:What’s new in INAV 6.0: Horizon Hawk 00:00:00 Introduction
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK