Switch用法以及新特性-最全总结版

本篇文章参考了大佬文章,感谢大佬无私分享:

http://t.csdnimg.cn/MjZnX

http://t.csdnimg.cn/QFg0x

 

目录

  一、Switch用法:JDK7及以前

1.1、举例一:

1.2、举例二: 

 二、Switch穿透: 

2.1、举例:

三、Switch用法:JDK12及以后

 3.1、举例一:

 3.2、举例二: 

 3.3、举例三:

 3.4、举例四:(最完美的例子)

 3.5、Switch、Record、yield实现复杂计算举例:

  一、Switch用法:JDK7及以前

1、switch中的表达式的数据的数据类型为byte,short,int,char,String(jdk>1.7支持String类型)
2、default可以放在任意一行,但是不管放在那一行,都会先找第一个case去匹配,如果所有的case都不匹配,才会执行default,default可以省略不写,建议写上。
3、break可以不写,就容易造成switch的穿透现象

        在JDK7以前,switch内的值仅支持byte、short、int、char类型或者枚举,在JDK7及以后,引入了对String类型的switch判断。代码如下: 

1.1、举例一:

    String match = "中国";switch (match){case "中国":System.out.println("China");break;case "日本":System.out.println("鬼砸");break;}

1.2、举例二: 

import java.util.Scanner;public class SwitchDemo {public static void main(String[] args) {/** 用户输入一个整数(月份),判断该月份处于什么季节?*/System.out.println("enter a month:");Scanner input = new Scanner(System.in);	//接收输入流,采用标准输入流int month = input.nextInt();switch (month){case 12:case 1:case 2:System.out.println("winter");break;case 3:case 4:case 5:System.out.println("spring");break;case 6:case 7:case 8:System.out.println("summer");break;case 9:case 10:case 11:System.out.println("autumn");break;default:System.out.println("您输入的月份错误!");}input.close();	//资源释放}
}

 二、Switch穿透: 

2.1、举例:

        int state =2;switch (state) {case 1:System.out.println("1");case 2:System.out.println("2");case 3:System.out.println("3");default:System.out.println("4");break;}

         输出结果为:2,3,4;即使state不为3和4,因为2中匹配后没有break,则后续代码则不会进行case判断,直到遇到break为止。

三、Switch用法:JDK12及以后

        在使用switch时有可能会出现”switch穿透“现象。如果你遗漏了break语句,有可能会造成严重的逻辑错误,所以为了防止意外出现”switch穿透“,从JDK 12开始,switch语句升级成了更简单的表达式语法,不再需要我们手动添加break语句。

        switch新特性:

1、在JDK 12的switch语句中,不用再写break语句,不会再出现switch的穿透现象;

2、如果case后面只有一条语句,可以直接在->后面编写该语句;如果有多条语句,需要用{}  括起来,当然也可以不使用->符号,继续采用以前的写法“:”也没问题;(下文有举例说明),但是 case 标签-> 与 case 标签不能同时混用;

3、JDK 13:完善了带返回值的switch语句,增加关键字yield;

4、如果只有一条语句,yield关键字可以省略: 

 3.1、举例一:

public class Demo01 {public static void main(String[] args) {// switch结构-case穿透System.out.println("请选择你的国家");Scanner sc = new Scanner(System.in);String country = sc.next();switch (country) {case "中国" -> System.out.println("我是中国人,我自豪!");case "日本" -> System.out.println("鬼子脚盆鸡");case "美国" -> {System.out.println("暂时还是老大");System.out.println("喜欢欺负人");}default -> System.out.println("未知国籍,黑户");}}}

3.2、举例二: 

import java.util.Scanner;public class SwitchDemo {public static void main(String[] args) {/** 用户输入一个整数(月份),判断该月份处于什么季节?*/System.out.println("(switch新特性)enter a month:");Scanner input = new Scanner(System.in);	//接收输入流,采用标准输入流int month = input.nextInt();switch (month) {case 12, 1, 2 ->System.out.println("winter");case 3, 4, 5 ->System.out.println("spring");case 6, 7, 8 ->System.out.println("summer");case 9, 10, 11 ->System.out.println("autumn");default -> System.out.println("非法月份!");}input.close();	//资源释放}
}

 3.3、举例三:

 @Testpublic void testRecord08(){int week = 7;String memo = "";switch(week){case 1 -> memo = "今天是星期一,开始新的一周的工作了";case 2,3,4,5,6 -> memo = "今天是工作日,搬砖";case 7 -> memo = "今天星期七,休息咯";default -> throw new IllegalArgumentException("无效日期");}System.out.println(memo);}

 3.4、举例四:(最完美的例子)

        JDK 13:完善了带返回值的switch语句,增加关键字yield,yieldswitch 作为表达式,能够返回值,即yield作为switch表达式的返回值;

          在JDK 12的switch语句中,支持使用->符号,当然也可以不使用->符号,继续采用以前的写法“:”也没问题:

    @Testpublic void testSwitch() {int week = 2;String memo = switch(week){case 1 : yield "星期一,工作";case 2,3,4,5,6 : yield "工作日,继续工作";case 7 : yield "星期七,休息咯";default: yield "无效日期";};System.out.println(memo);}

        如果只有一条语句,yield关键字可以省略: 

import java.util.Scanner;
public class SwitchExpression {public static void main(String[] args) {/** 用户输入年份,判断十二生肖* 0-11表示十二生肖,以monkey开始*/System.out.println("(switch新特性)enter a year:");Scanner input = new Scanner(System.in);	//标准输入流int year = input.nextInt();	//接收用户键盘输入的整数 year:年String zodiac = switch(year % 12) {	//注意这里switch表达式是有返回值的,且是必须的case 0 -> "monkey";	//这里如果只有一条语句,返回的关键字是可以省略的,而且自带breakcase 1 -> "roster";case 2 -> "dog";case 3 -> {			//注意如果需要多条语句,需要在花括号内进行,在switch表达式中,如果多条语句,最后的值返回需要使用yield关键字进行返回System.out.println("计算选择器case == 3 的情况");yield "pig";	//注意这里返回的关键字不是return,而是yield}	case 4 -> "mouse";case 5 -> "ox";case 6 -> "tiger";case 7 -> "rabbit";case 8 -> "dragon";case 9 -> "snake";case 10 -> "horse";case 11 -> "sheep";default -> "";	//注意switch表达式的值必须是穷尽的,故defalult不能省略};input.close();	//资源释放System.out.println(year + " is " + zodiac);}}

3.5、Switch、Record、yield实现复杂计算举例:

          没学过新特性Record的同学可以看本人此篇文章:http://t.csdnimg.cn/2a8pE

@Testpublic void testSwitch01(){Line line = new Line(10,20);Rectangle rectangle = new Rectangle(20,50);Shape shape = new Shape(50,80);Object obj = line;int result = switch(obj){case Line(int x, int y)->{System.out.println("图象是Line,x:" + x + ", y:" + y);yield x + y;}case Rectangle(int w, int h)-> 2*(w + h);case Shape(int x, int y)->{System.out.println("图像是shape");yield x*y;}default -> 0;};System.out.println("result = " + result);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/644592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】常见指令(二)

前言 常见指令第二部分。 文章目录 一、指令&#xff08;下&#xff09;重定向>&#xff1a;输出重定向>>&#xff1a;追加输出<&#xff1a;输入重定向 10. more—显示文本文件内容11.less—逐屏浏览文本文件内容12. head13. tail管道 |14. date—时间指令在这里插…

rust for循环步长-1,反向逆序遍历

fn main() {for i in (0..3).rev().step_by(1) {print!("{}", i);} } // 打印结果&#xff1a;210Trait std::iter::Iterator fn rev(self) -> Rev where Self: Sized DoubleEndedIteratorfn step_by(self, step: usize) -> StepBy where Self: Sized

DI和IOC

依赖注入&#xff08;Dependency Injection, DI&#xff09;和控制反转&#xff08;Inversion of Control, IoC&#xff09;是面向对象编程中的两个重要概念&#xff0c;它们紧密相关并在现代软件开发中经常结合使用。 依赖注入&#xff1a; 依赖注入是一种设计模式&#xff0…

2024年可能会用到的几个地图可视化模板

前言 在数字化的过程中&#xff0c;数据可视化变得越来越重要。用户喜欢通过酷炫的视觉效果和直观的数据展示来理解数据。可视化地图组件是数据可视化的重要组成部分。这些地图组件提供多样化的效果&#xff0c;能够更好地展示数据的关系和地理分布&#xff0c;直观地将数据与…

高高兴兴过春节

一年一度的春节到了&#xff0c;到处洋溢着节日的气氛&#xff0c;到处彩灯高照&#xff0c;鞭炮齐鸣。   早上&#xff0c;我早早地起来和姐姐一起给爷爷奶奶拜年&#xff0c;爷爷很开心给了我一个大大的红包。吃完早饭&#xff0c;妈妈贴春联&#xff0c;爸爸挂灯笼&#x…

裁员潮中的自我成长,小故事,大鼓励

程序员裁员潮&#xff1a;技术变革下的职业危机 科技浪潮滚滚而来&#xff0c;我们了解科技&#xff0c;敬畏科技&#xff0c;拥抱科技。我们怕的不是裁员&#xff0c;而是自己无所适从的样子。 2023年&#xff0c;科技公司裁员的新闻屡见不鲜。据统计&#xff0c;今年以来&…

uniapp设置隐藏原生导航栏(3)

1、单个页面隐藏 在pages.json里配置 (第一种方式) {"path": "pages/home/index","style": {"navigationBarTitleText": "首页","navigationStyle": "custom" // 使用自定义导航栏&#xff0c;系统会关…

SpringBoot3+JDK21集成MyBatisPlus3.5.5

哈喽&#xff0c;大家好&#xff0c;我是呼噜噜&#xff0c;在上一篇文章SpringBoot3Jdk17来了 | 春见知识分享基础上&#xff0c;笔者把jdk17直接换成了jdk21一步到位&#xff0c;来踩踩坑 添加依赖 修改pom.xml文件&#xff1a; <dependency><groupId>com.baom…

日历的实现(java语言,包括钟表盘的实现、日历内部的日程提醒)

整理文件发现了大一的时候的作业&#xff0c;先感慨一波时间过得真的快&#xff01; 手中的这个是一个独立的java文件&#xff0c;可以直接就可以运行&#xff0c;应该是没有什么问题的。不想这个代码就此落灰了&#xff0c;希望可以给友友们带来一点点帮助&#xff01; 运行…

避免邮件进入垃圾箱的实用技巧:提高邮件接收率的策略

邮件进垃圾邮箱一部分原因是IP地址出现了问题&#xff0c;一部分是邮件内容。那我们应该怎么避免邮件进入垃圾邮箱呢&#xff1f; 1、邮件内容 1&#xff09;邮件标题 邮件标题是影响邮件打开率非常重要的因素&#xff0c;所以大家可能会在标题上放置一些吸引人的符号或者词…

聚道云连接器助力钉钉与金蝶云星辰无缝对接,实现多维度数据同步

客户介绍 某企业服务有限公司专注于为企业提供全方位、高质量的企业服务&#xff0c;致力于于企业管理咨询、企业形象策划、市场营销策划、财务管理咨询等方面。该公司拥有一支经验丰富、专业化的团队&#xff0c;他们深入了解企业需求&#xff0c;为客户提供个性化的解决方案…

美化环境,保护母亲河

同学们&#xff0c;你们好&#xff1a;       大家都应该知道吧&#xff0c;我们的母亲河——黄河正在慢慢地恶化。       知道吗&#xff1f;我国为了防止北京再次遭受沙尘暴的袭击&#xff0c;在新疆&#xff0c;宁夏等多个沙漠化地区都种上了一“层”绿色的“防沙…

列表的创建与删除

Python 中列表可以动态地添加、修改和删除元素&#xff0c;是 Python 编程中不可或缺的一部分。本文将介绍如何使用 Python 创建和删除列表&#xff0c;以及常用的方法和技巧。 创建列表 在 Python 中&#xff0c;我们可以使用一对方括号 [ ] 来创建一个空列表&#xff0c;也可…

关于 Go 协同程序(Coroutines 协程)、Go 汇编及一些注意事项。

参考&#xff1a; Go 汇编函数 - Go 语言高级编程 Go 嵌套汇编 - 掘金 (juejin.cn) 前言&#xff1a; Golang 适用 Go-Runtime&#xff08;Go 运行时&#xff0c;嵌入在被编译的PE可执行文件之中&#xff09;来管理调度协同程式的运行。 Go 语言没有多线程&#xff08;MT&a…

前端常见安全问题以及解决方案汇总

当涉及到前端开发时&#xff0c;安全性是至关重要的一环。在当今数字化的世界中&#xff0c;用户数据的保护和应用程序的安全性变得愈发重要。作为前端开发者&#xff0c;我们不仅需要关注页面的美观和功能&#xff0c;还要时刻牢记确保用户数据的安全以及应用程序的健壮性。本…

开源免费无广告Gopeed,现代化的高速下载器,支持(HTTP、BitTorrent、Magnet)等多种协议下载,开源免费、无广告、高度可定制、不限速。

目录 特点 支持的平台 一键部署 体验 特点 全平台支持、开源免费&#xff0c;不限速、无广告 遵循 GPL-3.0 开源协议 支持&#xff08;HTTP、BitTorrent、Magnet&#xff09;协议下载 高速下载&#xff0c;底层使用golang协程并发下载 每日自动更新 tracker 列表 去中心…

IPv4 over IPv6简介

在IPv4 Internet向IPv6 Internet过渡的后期&#xff0c;IPv6网络已被大量部署&#xff0c;此时可能出现IPv4孤岛。利用隧道技术可在IPv6网络上创建隧道&#xff0c;从而实现IPv4孤岛的互连。这类似于在IP网络上利用隧道技术部署VPN。在IPv6网络上用于连接IPv4孤岛的隧道&#x…

Oracle触发器简单应用示例

目录 一、应用描述 【1】、应用场景&#xff1a; 【2】、具体场景&#xff1a; 二、表结构介绍 【1】表名介绍&#xff1a; 【2】表结构&#xff1a; 三、设置触发器 一、应用描述 【1】、应用场景&#xff1a; 现有一张库存明细以及销售明细表&#xff0c;销售明细表发生…

知识图谱符号表示比较:特性图、RDF和OWL

目录 前言1 特性图&#xff1a;灵活的图结构表示1.1 优势与灵活性1.2 存储优化与查询优势1.3 挑战&#xff1a;缺乏工业标准支持 2 RDF&#xff08;Resource Description Framework&#xff09;&#xff1a;面向Web的数据标准2.1 三元组结构的优势2.2 语义标准与词汇丰富性2.3 …

Java算法 leetcode简单刷题记录6

Java算法 leetcode简单刷题记录6 环和杆&#xff1a; https://leetcode.cn/problems/rings-and-rods/ 统计范围内的元音字符串数&#xff1a; https://leetcode.cn/problems/count-the-number-of-vowel-strings-in-range/ 最长平衡子字符串&#xff1a; https://leetcode.cn/…