Skip to content

6.5 switch 语句

switch 语句的概念

switch 语句是 Java 中用于多分支选择的语句,它根据表达式的值来选择执行哪个代码块。与 if…else if…else 语句相比,switch 语句在处理多个固定值的情况时更加简洁易读。

switch 语句的语法

java
switch (表达式) {
    case 值1:
        // 表达式等于值1时执行的代码
        break;
    case 值2:
        // 表达式等于值2时执行的代码
        break;
    case 值3:
        // 表达式等于值3时执行的代码
        break;
    default:
        // 表达式不等于任何case值时执行的代码
        break;
}
  • 表达式:返回一个值的表达式,类型可以是 byte、short、int、char、String 或枚举类型
  • case:表示一个分支,后面跟一个值
  • break:用于结束当前 case 分支的执行
  • default:当表达式不等于任何 case 值时执行的代码(可选)

switch 语句的使用

基本用法

java
public class SwitchExample {
    public static void main(String[] args) {
        int day = 1;
        switch (day) {
            case 1:
                System.out.println("Monday");
                break;
            case 2:
                System.out.println("Tuesday");
                break;
            case 3:
                System.out.println("Wednesday");
                break;
            case 4:
                System.out.println("Thursday");
                break;
            case 5:
                System.out.println("Friday");
                break;
            case 6:
                System.out.println("Saturday");
                break;
            case 7:
                System.out.println("Sunday");
                break;
            default:
                System.out.println("Invalid day");
                break;
        }
    }
}

使用 String 类型

java
public class SwitchStringExample {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
            case "apple":
                System.out.println("Apple is red");
                break;
            case "banana":
                System.out.println("Banana is yellow");
                break;
            case "grape":
                System.out.println("Grape is purple");
                break;
            default:
                System.out.println("Unknown fruit");
                break;
        }
    }
}

使用枚举类型

java
public class SwitchEnumExample {
    enum Season {
        SPRING, SUMMER, AUTUMN, WINTER
    }
    
    public static void main(String[] args) {
        Season season = Season.SPRING;
        switch (season) {
            case SPRING:
                System.out.println("Spring is beautiful");
                break;
            case SUMMER:
                System.out.println("Summer is hot");
                break;
            case AUTUMN:
                System.out.println("Autumn is colorful");
                break;
            case WINTER:
                System.out.println("Winter is cold");
                break;
            default:
                System.out.println("Unknown season");
                break;
        }
    }
}

switch 语句的执行流程

  1. 计算表达式的值
  2. 依次与每个 case 的值进行比较
  3. 如果找到匹配的 case,执行对应的代码块
  4. 遇到 break 语句时,跳出 switch 语句
  5. 如果没有找到匹配的 case,执行 default 代码块(如果有)

switch 语句的注意事项

1. break 语句的作用

break 语句用于结束当前 case 分支的执行,防止执行下一个 case 分支。如果没有 break 语句,会继续执行下一个 case 分支,直到遇到 break 语句或 switch 语句结束。

java
public class SwitchWithoutBreakExample {
    public static void main(String[] args) {
        int number = 2;
        switch (number) {
            case 1:
                System.out.println("One");
                // 没有 break
            case 2:
                System.out.println("Two");
                // 没有 break
            case 3:
                System.out.println("Three");
                break;
            default:
                System.out.println("Other");
                break;
        }
    }
}

输出结果:

Two
Three

2. case 值的唯一性

每个 case 的值必须是唯一的,不能重复。

3. 表达式类型

switch 语句的表达式类型可以是:

  • 基本数据类型:byte、short、int、char
  • 引用数据类型:String、枚举类型

4. default 分支

default 分支是可选的,当表达式不等于任何 case 值时执行。

switch 语句的应用场景

1. 菜单选择

java
int choice = 1;
switch (choice) {
    case 1:
        // 执行选项 1
        break;
    case 2:
        // 执行选项 2
        break;
    case 3:
        // 执行选项 3
        break;
    default:
        // 无效选项
        break;
}

2. 状态处理

java
String status = "pending";
switch (status) {
    case "pending":
        // 处理待处理状态
        break;
    case "processing":
        // 处理处理中状态
        break;
    case "completed":
        // 处理已完成状态
        break;
    default:
        // 处理未知状态
        break;
}

3. 月份处理

java
int month = 1;
switch (month) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        System.out.println("31 days");
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        System.out.println("30 days");
        break;
    case 2:
        System.out.println("28 or 29 days");
        break;
    default:
        System.out.println("Invalid month");
        break;
}

示例:switch 语句的使用

java
public class SwitchApplication {
    public static void main(String[] args) {
        // 数字转换为星期
        int day = 5;
        switch (day) {
            case 1:
                System.out.println("Monday");
                break;
            case 2:
                System.out.println("Tuesday");
                break;
            case 3:
                System.out.println("Wednesday");
                break;
            case 4:
                System.out.println("Thursday");
                break;
            case 5:
                System.out.println("Friday");
                break;
            case 6:
                System.out.println("Saturday");
                break;
            case 7:
                System.out.println("Sunday");
                break;
            default:
                System.out.println("Invalid day");
                break;
        }
        
        // 字符串匹配
        String grade = "A";
        switch (grade) {
            case "A":
                System.out.println("Excellent");
                break;
            case "B":
                System.out.println("Good");
                break;
            case "C":
                System.out.println("Average");
                break;
            case "D":
                System.out.println("Pass");
                break;
            case "F":
                System.out.println("Fail");
                break;
            default:
                System.out.println("Invalid grade");
                break;
        }
        
        // 月份天数
        int month = 2;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println(month + " has 31 days");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println(month + " has 30 days");
                break;
            case 2:
                System.out.println(month + " has 28 or 29 days");
                break;
            default:
                System.out.println("Invalid month");
                break;
        }
    }
}

常见问题

1. 忘记添加 break 语句

症状:执行完一个 case 后,继续执行下一个 case

解决方案:在每个 case 分支的末尾添加 break 语句

2. case 值重复

症状:编译错误:error: duplicate case label

解决方案:确保每个 case 的值都是唯一的

3. 表达式类型不支持

症状:编译错误:error: incompatible types

解决方案:确保表达式的类型是 switch 语句支持的类型

4. 缺少 default 分支

症状:当表达式不等于任何 case 值时,没有默认处理

解决方案:添加 default 分支来处理未知情况

总结

switch 语句是 Java 中用于多分支选择的语句,它根据表达式的值来选择执行哪个代码块。与 if…else if…else 语句相比,switch 语句在处理多个固定值的情况时更加简洁易读。

在使用 switch 语句时,需要注意:

  • 每个 case 分支末尾需要添加 break 语句
  • case 值必须是唯一的
  • 表达式类型必须是 switch 语句支持的类型
  • 可以添加 default 分支来处理未知情况

通过合理使用 switch 语句,可以使程序的多分支选择逻辑更加清晰易读。

© 2026 编程马·菜鸟教程 版权所有