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 编程马·菜鸟教程 版权所有