我的编程空间,编程开发者的网络收藏夹
学习永远不晚

从Java 9 到 Java 17之Java 13

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

从Java 9 到 Java 17之Java 13

Java 13在2019年9月发布,这个版本引入的正式可用特性几乎没有,是我认为最无聊的版本之一。所以我们跳过Java 13直接来看Java 14吧。

Switch表达式

我觉得switch表达式在日常中开发被使用的太少了,不是因为这个关键字和if比起来太“难”,而是因为它很冗长,而且这种视觉上的噪声容易掩盖那些难以调试的错误,特别是那些break语句,就像下面这样:

  1. switch (day) { 
  2.     case MONDAY: 
  3.     case FRIDAY: 
  4.     case SUNDAY: 
  5.         System.out.println(6); 
  6.         break; 
  7.     case TUESDAY: 
  8.         System.out.println(7); 
  9.         break; 
  10.     case THURSDAY: 
  11.     case SATURDAY: 
  12.         System.out.println(8); 
  13.         break; 
  14.     case WEDNESDAY: 
  15.         System.out.println(9); 
  16.         break; 
  17.     default
  18.         System.out.println(11);     

一点也不清晰,所以我写Java时通常拒绝使用switch表达式。

新的switch标签

为了简化switch,Java在引入了 switch标签case L ->这样一个预览特性,如果输入匹配L,则仅执行标签右侧的代码。我们还建议每个 case 允许多个常量,用逗号,分隔。之前的代码现在可以写成:

  1. switch (day) { 
  2.  
  3. case MONDAY, FRIDAY, SUNDAY -> System.out.println(6); 
  4.  
  5. case TUESDAY -> System.out.println(7); 
  6.  
  7. case THURSDAY, SATURDAY -> System.out.println(8); 
  8.  
  9. case WEDNESDAY -> System.out.println(9); 
  10.  
  11. default -> System.out.println(11); 
  12.  

case L ->switch标签右侧的代码被限制为表达式、代码块或throw语句。如果我们希望Switch语句有返回值可以这样写:

  1. int numLetters = switch (day) { 
  2.     case MONDAY, FRIDAY, SUNDAY -> 6; 
  3.     case TUESDAY                -> 7; 
  4.     case THURSDAY, SATURDAY     -> 8; 
  5.     case WEDNESDAY              -> 9; 
  6.     default                     -> 11;     
  7. }; 

当Switch语句赋值给变量时default分支是必须的。

yield 受限标识符

case L ->右边是一个代码块而且根据case条件会产生一个值的情况下,根据我们的思维惯性会这样写:

  1. int numLetters = switch (day) { 
  2.  
  3.     case WEDNESDAY              -> { 
  4.         System.out.println("day = " + day); 
  5.         // 错误的写法,会引发编译错误 
  6.         return 9; 
  7.     }; 
  8.     default -> 11; 
  9. }; 

你会发现上面的写法通不过编译,这是语境问题,当满足case条件时并不是返回(return)一个值的意思,而是产生(yield)了一个值。所以引入了一个新的受限标识符yield(注意不是关键字)来处理这个语境问题。

  1. int numLetters = switch (day) { 
  2.  
  3.     case WEDNESDAY              -> { 
  4.         System.out.println("day = " + day); 
  5.         // yield 才是正确的 
  6.         yield 9; 
  7.     }; 
  8.     default -> 11; 
  9. }; 

更合理的空指针提示

空指针异常是Java最常见的异常之一,在Java 14之前的空指针异常堆栈信息中只是提示给定行的发生了NullPointerException,不够直观清晰:

  1. Exception in thread "main" java.lang.NullPointerException 
  2.  
  3. at cn.felord.SomeClass.main(SomeClass.java:17) 

现在日志会说明空指针的具体来源:

  1. Exception in thread "main" java.lang.NullPointerException: Cannot store to int array because "arr" is null 
  2.  
  3. at cn.felord.SomeClass.main(SomeClass.java:17) 

我们可以明确地知道arr为null导致了空指针。

其它的一些变更

由于一些预览特性并没有转正,甚至在未来可能移除,所以这里不再进行详细的说明。感兴趣的可以到Java 14发行日志[1]页面查看。多多关注,点赞,转发,评论,后续为大家带来更多有价值的内容输出。

参考资料

[1]Java 14发行日志: https://openjdk.java.net/projects/jdk/14/

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

从Java 9 到 Java 17之Java 13

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

从Java 9 到 Java 17之Java 13

Java 13在2019年9月发布,这个版本引入的正式可用特性几乎没有,是我认为最无聊的版本之一。所以我们跳过Java 13直接来看Java 14吧。

从Java 9 到 Java 17之Java 12

Java 12 引入了新的基于区域的紧凑型数字化格式类CompactNumberFormat,用来对长数字进行简写。通常程序员喜欢把工资区间标为10k-20k,而其它一些行业喜欢10000-20000。

从Java 9 到 Java 17之 Java 11

Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。今天我们接着在Java 9 到 Java 17系列文章中来认识针对普通开发者的Java 11。

从 Java 9 到 Java 17 之 Java 10

Java 10的性能也明显加强了,支持G1并行垃圾收集。另外引入了即时编译技术(JIT),该技术可以加速java程序的运行速度。另外Java 10对容器集成也进行了优化,JVM会根据容器的配置进行选择CPU核心数量和内存占用。

从 Java 11 迁移到 Java 17 值得吗?

Java17中所做的所有改进都传达了一个信息:是时候切换到这个版本了。过渡承诺语法更简洁,性能得到提高。你的项目将获得安全性、灵活性和更好的错误消息。如果你已经迁移到Java11,那么迁移到Java17 会很顺利。
Java17LTSJava112024-11-30

【Java从0到1学习】13 Java IO流

1. 流 1.1 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。 一个流,必有源端和目的端,它们可以是计算机内存的某
2023-08-30

Java之怎么实现从Map到HashMap

本篇内容主要讲解“Java之怎么实现从Map到HashMap”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java之怎么实现从Map到HashMap”吧! 一、 Map1.1 Map 接口在 J
2023-06-15

十分钟从Java 8到Java 15

我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java 15都有。
Java8Java15Java2024-12-03

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17,我不是为了追求java 17的新特性(准确来说也还没有去了解有什么新特性),也不是为了准确与时俱进,永远走在java行列的最前端,纯粹因为项目需要,因为我们都知道,只要项目能跑,你就不要动它! 目
我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!
2023-12-23

大多数 Java 开发者计划在明年内过渡到 Java 17

JRebel 发布了最新的 2022 Java 开发人员生产力报告。探讨了 2022 年 Java 开发人员调查的结果,并详细说明了 Java 开发的最大趋势如何影响从技术选择到部署和提交时间的方方面面。

Java EJB从入门到精通的进阶之路

探索 Java EJB:从初学者到专家的进阶指南
Java EJB从入门到精通的进阶之路
2024-02-20

Java数据结构之LinkedList从链表到实现

LinkedList是Java中常用的数据结构之一,实现了链表的特性,支持快速添加、删除元素,可以用于实现队列、栈、双向队列等数据结构。LinkedList的内部实现采用了双向链表,其中每个节点都包含前驱节点和后继节点的引用,可以直接访问链表的头尾元素
2023-05-18

从 Java 锁到分布式锁

在并发编程中常用到 synchronized 以及 ReentrantLock 锁,在业务开发过程中也可能会用到分布式锁,分布式锁常用框架的就是基于 Redis 实现的分布式锁框架 Redisson 和 基于 Zookeeper 实现的分布

Java JMX 进阶指南:从新手到大师之路

Java 管理扩展 (JMX) 在监控和管理 Java 应用程序方面发挥着至关重要的作用。本指南将带您踏上从 JMX 新手到大师的进阶之路,深入探索其概念、配置和高级用法。
Java JMX 进阶指南:从新手到大师之路
2024-02-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录