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—时间指令在这里插…

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

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

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

程序员裁员潮&#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;为客户提供个性化的解决方案…

列表的创建与删除

Python 中列表可以动态地添加、修改和删除元素&#xff0c;是 Python 编程中不可或缺的一部分。本文将介绍如何使用 Python 创建和删除列表&#xff0c;以及常用的方法和技巧。 创建列表 在 Python 中&#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 …

elment-plus如何引入scss文件实现自定义主题色

elment-plus如何引入scss文件实现自定义主题色&#xff01;如果您想修改elementPlus的默认主题色调&#xff0c;使用自定义的色调&#xff0c;可以考虑使用官方提供的解决办法。 第一步你需要在项目内安装sass插件包。 npm i sass -D 如图&#xff0c;安装完成后&#xff0c;你…

gdzwfw某省公共资源交易平台逆向学习

声明&#xff1a;本文中网站仅为学习技术使用&#xff0c;请勿暴力爬取数据。 学习地址&#xff1a;aHR0cHM6Ly95Z3AuZ2R6d2Z3Lmdvdi5jbi8jLzQ0L2p5Z2c 此网站采用请求头反爬&#xff0c;难点是请求头中几个参数是如何生成的&#xff08;别问为什么知道是请求头&#xff0c;一…

java进阶-jvm精讲及实战

深入了解jvm及实战 1.引言2.jvm概念理解1.1什么是jvm1.2 jvm功能1.3 jvm规范及主流版本1.4 jre jdk jvm的区别和联系1.5 jvm组成 2.jvm-字节码文件class2.1 java和class无关性2.2 字节码应用场景2.4 字节码文件打开方式2.3 字节码文件组成2.3.1 一般信息2.3.2 常量池2.3.3 方法…

Flutter底部导航栏插件persistent_bottom_nav_bar的使用

flutter 框架中的 persistent_bottom_nav_bar 插件可以让我们快速实现页面底部导航栏&#xff08;也就是 bottomNavigationBar &#xff09;的布局且能拥有多样的切换效果&#xff08;包括但不限于&#xff1a;动画切换效果、中间凸起按钮效果等&#xff09; 插件网址&#xf…

【MySQL·8.0·源码】subquery 子查询处理分析(一)

引言 在 SQL 中&#xff0c;子查询属于 Nested Query 的一种形式&#xff0c;根据 Kim 的分类[1]&#xff0c;Nested Query 即嵌套查询是一种 SQL-like 形式的查询语句嵌套在另一 SQL 中&#xff0c;SQL-like 的嵌套子句可以出现在 SELECT、FROM 和 WHERE 子句的任意位置。 在…

GBASE南大通用分享如何更新row类型表达式

从 SPL 例程内&#xff0c;您可使用 ROW 变量来更新 row 类型表达式。下图展示当员工的基本薪 酬按某一百分比增长时&#xff0c;用于更新 emp_info 表的 SPL 过程 emp_raise。 用于更新 emp_info 表的 SPL 过程。 SELECT 语句将来自 emp_info 表的 salary 列的行选择到 ROW …

Java项目:125SpringBoot教室预约管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 教室预约管理系统使用SpringBootMybatis进行开发&#xff0c;系统整体分为前台和后台&#xff0c;后台主要对教室&#xff0c;用户等信息进行管理&#xf…