Java 9 - 17 特性解读:Java 13
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
分支是必须的。
如果您正在学习Spring Cloud,推荐一个经典教程(含Spring Cloud Alibaba):https://blog.didispace.com/spring-cloud-learning/
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
导致了空指针。
最近有小伙伴吐槽 2021.3 升级后不能无限试用了,正好看到一个方法,大家可以关注公众号 TJ君,回复IDEA2021.3,试试看吧
其它的一些变更
由于一些预览特性并没有转正,甚至在未来可能移除,所以这里不再进行详细的说明。感兴趣的可以到Java 14发行日志[1]页面查看。多多关注,点赞,转发,评论,后续为大家带来更多有价值的内容输出。
参考资料
[1]Java 14发行日志: https://openjdk.java.net/projects/jdk/14/
往期推荐
Java 9 - 17 特性解读:Java 12
Java 9 - 17 特性解读:Java 11
Java 9 - 17 特性解读:Java 10
Java 9 - 17 特性解读:Java 9
推荐关注本文作者:码农小胖哥
分享高质量编程知识,探讨IT人生
技术干货,实战技巧,面试技巧,前沿资讯一个都不能少
Java 9 - 17 特性解读:Java 13相关推荐
- Java 9 - 17 特性解读:Java 11
Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一.今天我们接着在Java 9 到 Java 17系列文章中来认识针对普通开发者的Java 11. 字符串API增 ...
- Java 9 - 17 特性解读:Java 10
在上一篇我们对Java 9的特性进行了一些回顾,今天接着来看看Java 10带来了什么特性.之所以需要把Java 8 到Java 17的特性归纳一遍,因为Java社区对Java 17的重视程度前所未有 ...
- Java 9 - 17 特性解读:Java 9
Java 17 是Java 最重要的一个LTS版本之一,但是直接从Java 8 过渡到Java 17跨度太大了,势必有些困难.所以胖哥抽时间梳理了一下从Java 9到Java 17的一些常用API的变 ...
- 【Java 8 新特性】Java Stream 通过skip()方法跳过前N个子元素
[Java 8 新特性]Java Stream 通过skip方法跳过前N个子元素 1.skip() 示例 2.skip() vs limit() 参考文献 本页将介绍 Stream.skip方法示例. ...
- 全网最全的JAVA所有版本特性【JAVA 1.0 - JAVA 20】
闲来想了解下各版本之间的特性,搜索没有最新的特性说明,故想写一份.废话不多说. PS:绝对全网最全最齐,若不是,请私聊我补充,哈哈哈哈! JDK Version 1.0 1996-01-23 Oak( ...
- [转]【JAVA各版本特性】JAVA 1.0
闲来想了解下各版本之间的特性,搜索没有最新的特性说明,故想写一份.废话不多说. JDK Version 1.0 1996-01-23 Oak(橡树) 初代版本,伟大的一个里程碑,但是是纯解释运行,使用 ...
- IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍
文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...
- 【Java 8 新特性】Java Clock 详解
Java Clock 详解 systemDefaultZone millis instant offset system systemUTC tick tickMillis tickSeconds t ...
- 【Java 8 新特性】Java Stream.of()用法示例
本页将介绍Java Stream.of方法示例.Stream.of用于为给定元素创建顺序流.我们可以传递单个元素或多个元素. 查看javadoc中Stream.of方法声明. static <T ...
最新文章
- php连接mssql的一些方法总结
- c++游戏代码坦克大作战_一红一蓝多种模式的双人小游戏:红蓝大作战
- 中国速度之二神山建设(3):有力的技术保障,基建世界里的云原生缩影 | IDCF DevOps案例研究...
- 关于tornado的异步耗时操作假设
- [VMM 2008虚拟化之初体验-1] 准备环境
- vue ---- webpack扩展
- Tideways+Xhgui搭建非侵入式php监控平台
- 多个onload事件写法
- javascript DOM操作
- c语言课程设计物业,C语言课程设计报告--物业管理系统.doc
- 冷高轮时间王思聪吃热狗电脑屏幕保护下载
- 商务统计_5 用图表演示数据 - 茎叶图
- 什么是软件质量?试叙述它与软件可靠性的关系。
- Oracle进阶(六)包(Package)和包体
- 3d视觉效果html,jQuery炫酷网页3D背景视觉差特效
- 从少量访问日志还原黑客攻击过程
- Failed to download https://chrome-infra-packages.appspot.com/dl/flutter/web/canvaskit_bundle 超时 解决办法
- windows msys2 启动缓慢 解决办法
- YOLOV4+DeepSort车流量检测基础版
- Andriod开发 GridView