iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java中switch语句的用法介绍
  • 753
分享到

java中switch语句的用法介绍

2023-07-06 14:07:34 753人浏览 八月长安
摘要

本篇文章和大家了解一下java中switch语句的用法介绍。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一. switch分支结构1. 简介switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,

本篇文章和大家了解一下java中switch语句的用法介绍。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

一. switch分支结构

1. 简介

switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个分支。switch语句在执行时,会先进行值的匹配,匹配成功时会进入到对应case语句。再根据是否有 break语句,判断是否继续输出,或是跳出当前switch判断。

2. 基本语法

在使用switch之前,首先我们得记住它的基本语法结构,其基本语法格式如下:

switch(值){     case 值1:         //switch中的值与值1相等时执行的代码       break; //可选    case 值2:         //switch中的值与值2相等时执行的代码       break; //可选    case 值3:         //switch中的值与值3相等时执行的代码       break; //可选    case 值4:         //switch中的值与值4相等时执行的代码       break; //可选    default:         //switch中的值与以上所有值都不相等时执行的代码       break; //可选}

那么这个语法具体有哪些要求呢?请继续往下看。

3. 语法规则(重点)

根据上面介绍的switch语法结构,再给大家详细说一下switch的语法规则和要求。

  • switch(值)语句中的”值“,支持的类型有如下几类:

    • 整型:byte、short、int 、char及其对应的包装类;

    • 枚举类型,从JDK 5开始支持(后面会详细讲解枚举类型);

    • String类型,从JDK 7开始支持,同时case标签后的值必须是字符串常量或字面量。

  • switch后面可以有多个 case 语句,每个 case 后都要跟一个待比较的值和冒号。

  • case标签后面值的数据类型必须与switch(值)中的数据类型相同,且只能是常量或者字面常量。

  • 当switch(值)的值与 case语句中的值相等时,case标签后面的语句开始执行,遇到break标签时停止执行switch语句。

  • case语句中不一定非要带有break语句。如果case后没有 break 语句,程序会继续执行下一个case 语句,直到出现 break 语句,这种现象叫做”case穿透“。

  • switch语句中可以包含一个default默认分支,该分支一般是 switch 语句的最后一个分支,当switch的值和case语句的值不相等时执行。default 分支中不用带有break 语句,另外该分支可以放在任何位置,但建议写在最后面。

4. 执行逻辑

根据上面的语法规则,我们可以结合下图来理解switch语句的执行逻辑。switch的执行逻辑,其实就相当于是把多种情况分别列出,根据我们输入的值来判断符合哪种情况。符合哪个情况,就进入到对应的分支里面去执行,整体的执行逻辑就是这样的,如下图所示:

java中switch语句的用法介绍

了解完这些理论内容之后,接下来就给大家设计几个switch的案例,我们一起动手实操起来吧。

二. switch案例

1. 基本案例

案例需求:输入一个序号,代表今天是星期几,选择今天要做的事情。

public class Demo01 {    public static void main(String[] args) {// switch结构Scanner sc=new Scanner(System.in);//根据输入的数字,选择每天要做的事情System.out.println("请输入日期序号,代表今天是星期几");int day = sc.nextInt();switch (day) {            case 0:                System.out.println("星期天,休息休息");                break;    case 1:    System.out.println("星期一,开始搬砖");        break;    case 2:        System.out.println("星期二,搬砖好累");        break;    case 3:        System.out.println("星期三,离周末还有3天");        break;    case 4:        System.out.println("星期四,明天就是周五啦");        break;    case 5:        System.out.println("星期五,明天就是周六啦");        break;    case 6:        System.out.println("星期六,开心.....");        break;    default:         System.out.println("希望天天都是周末...");        break;    }}

2. case穿透

在前面给大家讲过,如果 case 语句中没有 break 语句,当switch里的数值与case匹配成功后,会从当前 case 开始,把后续所有的 case 语句也都执行,这种现象叫做case穿透。一般情况下,我们要避免出现case穿透,防止一下执行多个语句。但有些时候,我们也可以利用这一特性,故意进行”穿透“。比如有几种情况的处理策略一样时,就可以通过”穿透“减少代码的编写。

接下来通过一个案例来给大家演示穿透现象。案例需求:选择A,输出”优秀“;选择B:输出”良好“;选择C:输出”一般“;选择D、E等:输出”很差“,其他情况则默认处理。不区分大小写,即选择A和a是一样的结果。

public class Demo01 {    public static void main(String[] args) {// switch结构-case穿透Scanner sc=new Scanner(System.in);        // 根据输入的数字,选择每天要做的事情System.out.println("请输入成绩等级");String level = sc.next();switch (level) {            case "a":            case "A":                System.out.println("优秀");                break;            case "b":            case "B":                System.out.println("良好");                break;            case "c":            case "C":                System.out.println("一般");                break;            case "d"://故意case穿透            case "D":            case "E":            case "F":                System.out.println("很差");                break;            default:                System.out.println("成绩无效");                break;    }}

三. switch新特性(了解)

1. 概述

我们知道,在使用switch时有可能会出现”case穿透“现象。如果你遗漏了break语句,有可能会造成严重的逻辑错误,而且这种错误还不太容易在源码中发现。所以为了防止意外出现”case穿透“,从jdk 12开始,switch语句升级成了更简单的表达式语法,使用了一种类似于模式匹配(Pattern Matching)的方式,确保只有一个路径会被执行,而且不再需要我们手动添加break语句。

这一新特性,可以说简化了不少无效代码,还规避了一定的风险,简直不要太赞哦。接下来就给大家设计几个案例,说说JDK 12中switch的使用。因为当前的JDK版本是JDK 17,可以向下兼容JDK 12,所以我们不用单独安装JDK 12哦。

2. 代码案例

2.1 ->符号

在JDK 12的switch语句中,支持使用 ->符号,当然也可以不使用->符号,继续采用以前的写法也没问题。如果case后面只有一条语句,可以直接在->后面编写该语句; 如果有多条语句,需要用 {} 括起来。另外在JDK 12的switch语句中,不用再写 break 语句,新的语法只会执行匹配的语句,不会出现”穿透效应“。

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("未知国籍,黑户");}    }}
2.2 switch中返回结果

在JDK 12中,我们可以把在 switch 语句中把产生的结果直接返回,不必再使用break语句进行结束。一般情况下,我们在switch表达式内部只会返回简单的值。但如果你想要处理多个复杂的语句,其实也可以写很多语句,这些代码都要放到放到 {...} 里面,然后使用 yield关键字(以后细讲) 进行返回。 配套案例如下:

public class Demo01 {    public static void main(String[] args) {// switch结构-case穿透System.out.println("请选择你的国家");Scanner sc = new Scanner(System.in);String country = sc.next();// 注意:这里的返回值类型,可以是任意类型。我们后面在学习方法时再细说返回值的问题String result = switch (country) {            case "中国" -> "我是中国人,我自豪!";            case "日本" -> "鬼子脚盆鸡";// 返回值只能有一个            case "美国" -> {                String str = "我们就喜欢以德服人";                // 注意:这里需要返回一个变量!!!                yield str;            }            default -> "未知国籍,黑户";};// 注意:这里需要有个“;”,表示语句的结束System.out.println("你的国家情况:" + result);    }}

四. 结语

在本篇文章中,给大家介绍了switch分支结构,至此我们就把三大流程控制结构中的分支结构学习完毕了。结合前一篇文章中学习的if语句,给大家总结一下if与switch的异同点。

1. 相同点

  • if和switch都是Java里的分支选择语句,它俩都属于条件分支语句;

  • 很多时候,if和swich可以实现的效果类似。

2. 不同点

  • switch结构只能处理等值条件判断的情况,且条件必须是整型、枚举变量或字符型变量;

  • 多重if选择结构没有switch结构的诸多限制,特别适合某个变量处于某个连续区间时的情况;

  • if比switch应用范围更广、更灵活。if可以实现的条件判断,switch不一定能够实现;switch可以实现的条件判断,if肯定可以实现。

  • if 在应用中更为常见,但switch的结构更清晰。

  • switch使用查找表比对的方式,使得case的条件必须是连续的常量,if语句则没有这些限制。

  • 一般情况下,switch比if-else效率更高。 因为switch内部使用了Binary Tree算法,不管有多少个case,都只计算一次值,直接跳转,不需逐个比较查询,除非是if-else的第一个条件就为true。

  • switch的效率其实与分支数无关。只有当分支比较少时,if语句的效率才比switch高,因为switch有跳转表。当分支较多时,推荐使用switch语句。

以上就是java中switch语句的用法介绍的简略介绍,当然详细使用上面的不同还得要大家自己使用过才领会。如果想了解更多,欢迎关注编程网精选频道哦!

--结束END--

本文标题: java中switch语句的用法介绍

本文链接: https://www.lsjlt.com/news/358551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL怎么更新字段长度
    要更新MySQL表中的字段长度,可以使用ALTER TABLE语句。以下是更新字段长度的示例: ALTER TABLE table_...
    99+
    2024-05-14
    mysql
  • sql如何修改表字段长度
    要修改表字段的长度,可以使用ALTER TABLE语句,然后使用MODIFY COLUMN来修改字段的长度。以下是一个示例: ALT...
    99+
    2024-05-14
    sql
  • mysql数据量太大如何解决
    有几种方法可以解决MySQL数据量过大的问题: 数据库分区:将数据库表按照某种规则进行分区,分成多个小表,可以提高查询速度和管理...
    99+
    2024-05-14
    mysql
  • MySQL单表数据量过大如何解决
    在MySQL中,当单表的数据量过大时,可以采取以下几种方法来解决问题: 使用索引:在表的字段上创建适当的索引,可以提高查询效率,...
    99+
    2024-05-14
    mysql
  • mysql导出数据量过大如何解决
    当导出的数据量过大时,可以尝试以下方法来解决问题: 使用数据库工具:使用数据库管理工具如Navicat或MySQL Workbe...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的作用是什么
    在MySQL中,log_bin是二进制日志文件的名称,用于记录所有对数据库进行更改的操作,如插入、更新、删除等。这些二进制日志文件可...
    99+
    2024-05-14
    mysql
  • mysql中log_bin的特点有哪些
    log_bin是MySQL的二进制日志文件,用于记录所有对数据库的修改操作,包括插入、更新、删除等。 log_bin文件是M...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装的方法是什么
    要在Linux系统上安装MySQL RPM包,可以按照以下步骤操作: 下载MySQL的RPM包:你可以从MySQL官方网站下载适...
    99+
    2024-05-14
    mysql
  • mysql rpm包安装后怎么使用
    安装MySQL RPM包后,您可以通过以下步骤来使用MySQL: 启动MySQL服务:使用以下命令来启动MySQL服务: sud...
    99+
    2024-05-14
    mysql
  • lxml中怎么处理XML命名空间默认值
    在lxml中处理XML命名空间的默认值可以通过使用xpath()方法和register_namespace()方法来实现。...
    99+
    2024-05-14
    lxml
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作