java中的switch语句

本文详细解析switch语句的匹配机制,重点讨论default关键字的位置对执行流程的影响,通过实例展示不同情况下default语句的执行行为。

 

switch语句在匹配的时候, 始终是最后一个匹配项。

 

 

 

不管default放在什么位置,它总是在最后一个匹配,然后继续向下处理

 

 

如果default语句放在最后, 则是否加break语句无所谓。

 

但是,如果default不是在最后,会是什么情况:

1、 default后有break语句, 如果匹配测话, 执行相应的case, 没有匹配项, 则执行default语句,并正常跳出switch。

2、 default后无break语句, 如果匹配测话, 执行相应的case, 没有匹配项, 则执行default语句,并继续执行执行下一个case。

 

所以default是始终是最后一个匹配, 但并不是最后一个执行

 

例1:

 

 

结果:

i==2:

two

分析:匹配成功,执行了对应的case, default没有执行

 

例2:

 

结果:

i==9:

default

zero

分析:匹配失败,先执行default, 由于default后无break语句, 所以继续执行了case 1。

 

 

### Javaswitch 语句的用法及示例 Java 中的 `switch` 语句是一种用于根据不同的条件执行不同代码块的流程控制结构。它通常用来替代多个 `if-else` 语句,使代码更加简洁和易于维护[^2]。 #### 基本语法 `switch` 语句的基本语法如下所示: ```java switch (variable or an integer expression) { case constant: // Java code break; case constant: // Java code break; default: // Java code } ``` 其中,`switch` 后面括号中的表达式必须是整数类型、枚举类型、字符串类型(从 Java 7 开始支持)或任何可以转换为整数的类型。每个 `case` 分支后跟一个常量值,并且通常以 `break` 语句结束,以防止“fall-through”现象,即执行完当前 `case` 后继续执行下一个 `case` 的情况[^1]。 #### 使用示例 ##### 示例 1:基本类型判断 `switch` 可以用于基本数据类型(如 `int`、`char` 等)行条件判断。例如,判断一周中的某一天: ```java int day = 1; String dayName; switch (day) { case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; default: dayName = "Unknown"; } System.out.println(dayName); // 输出 Monday ``` ##### 示例 2:字符串类型判断 从 Java 7 开始,`switch` 支持字符串类型的判断,适用于需要根据字符串值行分支的情况: ```java String fruit = "apple"; switch (fruit) { case "apple": System.out.println("You chose apple."); break; case "banana": System.out.println("You chose banana."); break; default: System.out.println("Unknown fruit."); } ``` ##### 示例 3:使用箭头语法(Java 14+) 从 Java 14 起,`switch` 引入了更简洁的表达式语法,使用 `->` 替代传统的 `:` 和 `break`,提升代码可读性: ```java int score = 85; String grade = switch (score) { case 90..100 -> "A"; // 范围匹配(Java 21+) case 80..89 -> "B"; case 70..79 -> "C"; default -> "F"; }; System.out.println(grade); // 输出 B ``` ##### 示例 4:记录类解构(Java 17+) 在 Java 17 中,`switch` 支持与记录类(record class)结合使用,实现对象的模式匹配和解构: ```java record Color(int r, int g, int b) {} Color color = new Color(255, 0, 0); switch (color) { case Color(255, 0, 0) -> System.out.println("Red"); case Color(int r, int g, int b) -> System.out.printf("RGB: (%d, %d, %d)%n", r, g, b); } ``` #### 注意事项 - **避免 fall-through**:如果不希望某个 `case` 执行结束后继续执行下一个 `case`,应在该分支末尾加上 `break`。 - **default 分支**:建议始终包含 `default` 分支,以处理未覆盖的所有情况。 - **表达式返回值**:在 Java 12 及以上版本中,`switch` 可以作为表达式使用,并返回一个值,这使得其在状态机或计算器等场景中非常有用。 - **模式匹配**:Java 17 引入了对模式匹配的支持,允许在 `switch` 中直接解构对象,从而简化多态对象的处理逻辑[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值