跳转至

Java 中的 Switch 语句详解

简介

在 Java 编程中,switch 语句是一种常用的条件控制结构,它允许根据一个表达式的值从多个分支中选择一个执行。在 Java 的不同版本中,switch 语句不断发展和改进,为开发者提供了更简洁、更强大的功能。本文将详细介绍 Java 中 switch 语句的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用 switch 语句。

目录

  1. 基础概念
  2. 使用方法
    • 传统 switch 语句
    • Java 12 及以后的 switch 表达式
  3. 常见实践
    • 枚举类型的 switch
    • 字符串类型的 switch
  4. 最佳实践
    • 避免 fall-through
    • 使用 switch 表达式简化代码
  5. 小结
  6. 参考资料

基础概念

switch 语句是一种多分支选择语句,它根据一个表达式的值,从多个可能的分支中选择一个执行。switch 语句中的表达式可以是整数类型(byteshortintchar)、枚举类型、字符串类型(从 Java 7 开始支持)以及 Java 14 及以后支持的 var 类型。每个分支由一个 case 标签和对应的代码块组成,当表达式的值与某个 case 标签的值匹配时,该 case 标签后的代码块将被执行。

使用方法

传统 switch 语句

传统的 switch 语句使用 break 语句来终止每个 case 分支,避免 fall-through(即执行完一个 case 分支后继续执行下一个 case 分支)。以下是一个传统 switch 语句的示例:

public class TraditionalSwitchExample {
    public static void main(String[] args) {
        int day = 3;
        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");
        }
    }
}

在上述示例中,switch 语句根据 day 变量的值选择相应的 case 分支执行,并在每个 case 分支的末尾使用 break 语句终止。如果 day 的值不在 1 到 7 的范围内,则执行 default 分支。

Java 12 及以后的 switch 表达式

从 Java 12 开始,引入了 switch 表达式,它允许 switch 语句返回一个值。switch 表达式使用箭头语法(->)来指定每个 case 分支的结果,并且不需要使用 break 语句。以下是一个 switch 表达式的示例:

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

在上述示例中,switch 表达式根据 day 变量的值返回相应的字符串,并将结果赋值给 dayName 变量。

常见实践

枚举类型的 switch

switch 语句经常与枚举类型一起使用,因为枚举类型的取值是有限的,非常适合使用 switch 语句进行处理。以下是一个使用枚举类型的 switch 语句示例:

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumSwitchExample {
    public static void main(String[] args) {
        Day day = Day.WEDNESDAY;
        switch (day) {
            case MONDAY:
                System.out.println("It's Monday!");
                break;
            case TUESDAY:
                System.out.println("It's Tuesday!");
                break;
            case WEDNESDAY:
                System.out.println("It's Wednesday!");
                break;
            case THURSDAY:
                System.out.println("It's Thursday!");
                break;
            case FRIDAY:
                System.out.println("It's Friday!");
                break;
            case SATURDAY:
                System.out.println("It's Saturday!");
                break;
            case SUNDAY:
                System.out.println("It's Sunday!");
                break;
        }
    }
}

在上述示例中,switch 语句根据 Day 枚举类型的值选择相应的 case 分支执行。

字符串类型的 switch

从 Java 7 开始,switch 语句支持使用字符串类型的表达式。以下是一个使用字符串类型的 switch 语句示例:

public class StringSwitchExample {
    public static void main(String[] args) {
        String color = "red";
        switch (color) {
            case "red":
                System.out.println("The color is red.");
                break;
            case "blue":
                System.out.println("The color is blue.");
                break;
            case "green":
                System.out.println("The color is green.");
                break;
            default:
                System.out.println("Unknown color.");
        }
    }
}

在上述示例中,switch 语句根据 color 字符串的值选择相应的 case 分支执行。

最佳实践

避免 fall-through

在传统的 switch 语句中,由于没有使用 break 语句会导致 fall-through 现象,这可能会导致意外的结果。因此,建议在每个 case 分支的末尾使用 break 语句,或者使用 switch 表达式来避免 fall-through

使用 switch 表达式简化代码

如果 switch 语句的目的是返回一个值,建议使用 switch 表达式,因为它可以使代码更加简洁和易读。

小结

本文详细介绍了 Java 中 switch 语句的基础概念、使用方法、常见实践以及最佳实践。传统的 switch 语句使用 break 语句来终止每个 case 分支,而 Java 12 及以后的 switch 表达式允许 switch 语句返回一个值,并且不需要使用 break 语句。switch 语句经常与枚举类型和字符串类型一起使用,在使用时应避免 fall-through 现象,并根据需要使用 switch 表达式来简化代码。

参考资料

  1. 《Effective Java》,作者:Joshua Bloch