Switch语句从Java7到Java17的演变
概述
自 java7 以来,java 中的Switch 语句经历了快速的演变。因此,在本文中,我们将举例讨论switch 语句从java7 到java17 的演变或变化。
让我们从初始 java 7 开始Java 7: Switch语句
在 Java7 之前,Switch 语句的判断条件只能接受int ,byte ,char ,short 类型的参数,这是很长一段时间以来的标准:int value = 5; switch (value) { case 1: System.out.println("One"); break; case 5: System.out.println("five"); break; default: System.out.println("Unknown"); } Java 8: Switch语句
在 Java8 中,case 值和switch 语句开始演化时引入了字符串和枚举字符串 Switch Case 语句举例:String day = "Tuesday"; switch (day) { case "Monday": System.out.println("Week day"); break; case "Tuesday": System.out.println("Week day"); break; case "Wednesday": System.out.println("Week day"); break; case "Thursday": System.out.println("Week day"); break; case "Friday": System.out.println("Week day"); break; case "Saturday": System.out.println("Weekend"); break; case "Sunday": System.out.println("Weekend"); break; default: System.out.println("Unknown"); } 枚举 Switch Case语句举例:enum DAYS { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } DAYS days = DAYS.SUNDAY; switch (days) { case MONDAY: System.out.println("Weekdays"); break; case TUESDAY: System.out.println("Weekdays"); break; case WEDNESDAY: System.out.println("Weekdays"); break; case THURSDAY: System.out.println("Weekdays"); break; case FRIDAY: System.out.println("Weekdays"); break; case SATURDAY: System.out.println("Weekends"); break; case SUNDAY: System.out.println("Weekends"); break; default: System.out.println("Unknown"); } Java 12: Switch语句
Java 12 进一步增强了switch 语句,并引入了switch 表达式作为预览特性。
它引入了一系列新功能: 当 switch 语句变成了switch 表达式时,您可以从一个switch 块中返回case 中可以有多个值您可以通过箭头操作符或 break 关键字从switch 表达式返回值,通过break 关键字返回值return switch (day) { case "Monday": break "Weekday"; case "Tuesday": break "Weekday"; case "Wednesday": break "Weekday"; case "Thursday": break "Weekday"; case "Friday": break "Weekday"; case "Saturday": break "Weekend"; case "Sunday": break "Weekend"; default: break "Unknown"; }; break 关键字返回结果值
这个词后来在 Java 13 中被关键字"yield" 取代。return switch (day) { case "Monday": yield "Weekday"; case "Tuesday": yield "Weekday"; case "Wednesday": yield "Weekday"; case "Thursday": yield "Weekday"; case "Friday": yield "Weekday"; case "Saturday": yield "Weekend"; case "Sunday": yield "Weekend"; default: yield "Unknown"; }; 通过箭头操作符返回值
此外, Java 12 引入了箭头操作符作为简单的替代,而不是使用break 关键字返回值:return switch (day) { case "Monday"-> "Week day"; case "Tuesday"-> "Week day"; case "Wednesday"->"Week day"; case "Thursday"->"Week day"; case "Friday"->"Week day"; case "Saturday"-> "Weekend"; case "Sunday"-> "Weekend"; default->"Unknown"; }; 多个case标签
同样, Java 12 也可以在一个case 语句中提供多个case 值,所以如果你观察上面的例子,因为有5 个case 在这里期望相同的值,所以我可以合并或合并多个case 值为一个,如下所示return switch (day) { case "Monday","Tuesday","Wednesday","Thursday","Friday" -> "Week day"; case "Saturday", "Sunday" -> "Weekend"; default->"Unknown"; }; Java 14: Switch 语句的改变
我们在 java 12 和13 中讨论过的任何switch 语句和特性,都是预览特性,需要将flag -enable-preview 设置为true 。但是Java 14 让所有的特性都不再是预览特性。标志-enable-preview 在java 14 启动时不需要设置。并且switch 语句已经演变成switch 表达式!
#Java 17: Switch语句/表达式:
JDK 17 已经发布,这是一个LTS ( long-term support )版本,下一代的Spring Framework 6 和Spring Boot 3 (2022 下半年发布),也将基于JDK 17 。由此可以推测,JDK 17 可能会和JDK 8 一样,也成为未来Java 项目使用的主力版本。
所以,现在才开始学 Java 的,可以直接学用JDK 17 。如果使用老版本学习资料进行学习,至少从JDK 8 开始,而JDK 8 之前的书,基本上都可以送废品收购站了。
开关表达特性 模式匹配 Gaurded 模式null case 模式匹配
它引入了一种新的开关特性,即模式匹配。您可以匹配 case 标签中的模式。 换句话说,你可以在switch 条件下传递对象,这个对象可以在switch case 标签中检查不同类型。return switch (obj) { case Integer i -> "It is an integer"; case String s -> "It is a string"; case Employee s -> "It is a Employee"; default -> "It is none of the known data types"; };
在上面的例子中,我将一个对象传递给 switch 条件。这在Java 17 之前是不可能的。然后可以检查该对象是否具有特定的数据类型,并将其赋值给一个变量。
例如,考虑以下情况: case Integer i- > "It is an integer";
传递的对象被检查类型为 Integer ,然后赋值给变量i ,如果它是一个整数。通过箭头操作符返回字符串"It is an integer"。Gaurded模式
让我们以这个用例为例。
在我检查了 Employee 实例的case 标签内,我想做一个额外的检查。
传统上,你可以在案例陈述之后做这个。
是这样的: case Employee emp: if(emp.getDept().equals("IT")) { yield "This is IT Employee"; }
switch 预览版扩展了Java 中的模式语言,允许switch 针对多个模式测试表达式和语句,每个模式都有特定的操作。Java 17 已经引入guarded 模式,允许模式匹配逻辑用任意布尔表达式。您可以在case 标签本身中进行检查,如下所示:return switch (obj) { case Integer i -> "It is an integer"; case String s -> "It is a string"; case Employee employee && employee.getDept().equals("IT") -> "IT Employee"; default -> "It is none of the known data types"; }; Null Case
在 Java 17 之前,你不可能在不抛出空指针异常的情况下将空值传递给switch 语句。
Java 17 允许您这样处理它:
case null -> "它是一个空对象";
这就是从 java 7 到java 17 的转换过程。
希望你喜欢这篇文章,点赞并且关注,学习更多 java 以及大数据优质知识。
河南一家5口4人被杀,凶手是夫妻,妻子被判12年引发争议最近一段时间,媒体报道了河南一家五口一年前惨遭灭门的消息,其中一家五口,有四人被杀,而凶手竟然是另一个家庭的夫妻俩。看到这个消息,很多网友都感到非常震惊有什么深仇大恨,非要闹得如此
60岁岳父灭了女婿一家三口,二审时死刑变死缓,啥仇这么大?今天我们要说的这个故事,发生在东三省的吉林一个60岁的老翁,竟然杀死了自己的女婿,以及女婿的父母,而女婿的父母也就是老翁的亲家,都是教师。而老翁的女婿只有33岁,正是人生的黄金年龄
苏黎世联邦理工学院研究通过12个小型无线电磁传感器追踪人体姿态(映维网2021年10月12日)苏黎世联邦理工学院的先进交互技术实验室(AdvancedInteractiveTechnologiesAIT)专注于而研究机器学习计算机视觉和人机交
比手机更靠谱的考生礼物?vivoTWS2成释放压力首选转瞬间已至年中六月,除了天气炎热外,这两天的高考氛围又为这炎炎夏日增添了一份热度。与很多家庭一样,我家里老妹也是今年的考生之一。回想起当年高考结束之后的我,仿佛心中还存有一丝惬意。
武新制冷天然气管网压力能回收及冷能综合利用项目初步调试成功余压余冷等新常规能源的回收利用,是实现碳达峰碳中和的解决方案之一。2021年7月,顶着火热的夏日骄阳,冰山集团武新制冷设计并投资承建的武汉市三金潭调压站天然气管网压力能回收及冷能综
音频剪辑无压力,分分钟教你搞定大家好,我是小编浩克,音频转换不会怎么办,相信很多小伙伴们都遇到过这种烦恼,迅捷音频转换器轻松好用,支持多种格式互换,还包括音频剪辑音频合并和音频提取功能分割方式多样功能丰富的软件
大数据机构培训班学习效果好吗?学习之路是如此的漫长,有的人总想着还是要多掌握一门技能,大数据一词又是最近比较火热的词条之一,一部分人想着学也是学,不如学一学这大数据技术,那么问题又来了,当选择去大数据培训机构培
大数据学习SparkRDD操作入门在Spark框架组件当中,核心部分不得不提到一个重要的概念,叫做RDD。而这个RDD,本身来说,也是Spark框架相比早期的HadoopMapReduce框架实现了性能提升的重要一
猪队友促震荡利布局上周判断本周金融三兄弟将换岗式护盘,但证券却故意制造震荡,造成大盘摇摇欲坠之感,从而利于主力布局明春行情。上周说银行和证券是本周主角,但证券却成了猪样的队友,打击小散一致看多的心理
大数据开发基础之SQL语句基本操作昨天我们把MySQL的基础知识大概说了一遍,所以接下来几篇文章我们都会细化的讲讲MySQL的一些内容,而今天就给大家带来大数据开发基础之SQL语句基本操作,在有了理论知识后也必须动
大数据开发zookeeper命令操作本期又是大家最喜欢的命令合集,今天给大家带来的是大数据开发zookeeper命令操作。作为大数据开发学习的基础,最基本的可不能落下,下面就开始zookeeper的命令操作的学习吧!