fall through switch的用法

switch 在其合适的case中开始运行,一直到遇到break或者跳出switch。那么如果你的case中没有break,那就会出现所谓的fall through现象,就像是滑滑梯一样。

 

以下是一段示例程序,有助于你理解fall through:

 

#include "stdio.h"


int main(int argc, char* argv[])
{
 printf("Hello World!/n");

 int num_of_operands = 2;


 //fall through 的设计可以把代码设计得很简约,
 //以下的这个操作数处理是一个很好的例子,它可以很简约的去处理每一个操作数
 //当然不得不说 switch 将 fall through 设计为默认操作是引起许多bug的原因

 //session 1:
 switch(num_of_operands){
 case 2://process_operand(operator->operand_2);
 case 1://process_operand(operator->operand_1);
 default:;
 }

 //session 2:即使是default 没有break,一样会出现fall through现象
 num_of_operands = 2;
 switch(num_of_operands){
 case 1:
  printf("case 1 fall through/n");
 default:
  printf("default fall through/n");
  //num_of_operands = 10;
 case 3:
  printf("case 2 fall through/n");
 
 }

 //conclusion :在使用switch时需要注意,如果是一般应用,请别忘了加上 break

 return 0;
}

 

当然不得不提,fall through 也是很多时候你忘记break带来的bug。

### Java 8 中 Switch 语句的使用方法与示例 #### 1. 基本语法 在 Java 8 中,`switch` 语句仍然遵循传统的结构,但它可以更灵活地处理各种情况。以下是标准的 `switch` 语句语法: ```java switch (expression) { case value1: // 执行代码块; break; case value2: // 执行代码块; break; default: // 默认执行代码块; } ``` 这里的 `expression` 可以是整数、字符、字符串或其他兼容的数据类型[^2]。 --- #### 2. 支持字符串作为条件值 从 Java 7 开始,`switch` 表达式支持字符串类型的参数。这一改进同样适用于 Java 8,并且增强了代码的可读性。例如: ```java public class SwitchStringExample { public static void main(String[] args) { String dayOfWeek = "Monday"; switch (dayOfWeek.toLowerCase()) { case "monday": System.out.println("Start of the work week."); break; case "friday": System.out.println("End of the work week."); break; default: System.out.println("It's another day."); break; } } } ``` 在这个例子中,我们将输入的字符串转换为小写以便统一比较[^3]。 --- #### 3. 处理未匹配的情况(Default) 当没有任何 `case` 匹配时,默认情况下会进入 `default` 分支。这是一个重要的机制,确保即使没有找到匹配项也能有合理的回退行为。例如: ```java int num = 5; switch (num + 2) { // 计算后的结果为 7 case 1: System.out.println("Case 1 matched"); break; case 2: System.out.println("Case 2 matched"); break; case 3: System.out.println("Case 3 matched"); break; default: System.out.println("No matching cases found"); // 输出此行 } ``` 在此示例中,因为计算得到的结果 `7` 不属于任何已定义的 `case` 范围,所以程序进入了 `default` 部分[^3]。 --- #### 4. Fall-through 特性 如果没有显式的 `break` 或者返回语句,则控制权将继续传递给下一个 `case`,直到遇到第一个有效的终止指令为止。考虑以下情形: ```java char grade = 'B'; switch (grade) { case 'A': System.out.println("Excellent!"); case 'B': // No break here. System.out.println("Good job!"); case 'C': System.out.println("Keep it up!"); break; // Terminate fall-through at C level. default: System.out.println("Invalid grade."); } ``` 运行这段代码将会依次打印 `"Good job!"` 和 `"Keep it up!"`,这是因为缺少了针对 `'B'` 的中断操作。 --- #### 5. Lambda 表达式与 Switch 结合(Java 8 新增特性间接关联) 虽然 Java 8 并未直接改变 `switch` 的核心功能,但是它引入了 lambda 表达式和函数式接口的概念,这为我们提供了更多可能性。假设我们需要基于某种状态调用不同的动作,可以用如下方式实现: ```java @FunctionalInterface interface Action { void perform(); } public class FunctionalSwitchExample { public static void main(String[] args) { int choice = 2; Action action = null; switch (choice) { case 1: action = () -> System.out.println("Action One Executed"); break; case 2: action = () -> System.out.println("Action Two Executed"); break; default: action = () -> System.out.println("Default Action Executed"); } if (action != null) { action.perform(); // Output depends on user input. } } } ``` 此处展示了如何结合匿名内部类的思想来构建更具扩展性的解决方案[^2]。 --- #### 总结 综上所述,尽管 Java 8 对 `switch` 本身的改动不大,但通过与其他现代特性的融合,开发者能够编写出更加优雅高效的逻辑分支管理方案。掌握好这些技巧对于提高日常开发效率大有益处。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值