跳转至

Java 中 switch case 的语法详解

简介

在 Java 编程语言中,switch case 语句是一种重要的条件控制结构,它允许根据一个表达式的值从多个代码块中选择执行其中之一。相比于多个 if - else 语句的嵌套,switch case 语句在某些情况下提供了更清晰、简洁的代码结构,尤其适用于对一个固定值集合进行匹配的场景。本文将详细介绍 switch case 的基础概念、使用方法、常见实践以及最佳实践。

目录

  1. 基础概念
  2. 使用方法
    • 基本语法
    • 表达式类型
    • 执行流程
  3. 常见实践
    • 简单示例
    • 多值匹配
    • 穿透行为
  4. 最佳实践
    • 增强可读性
    • 避免不必要的穿透
    • 处理默认情况
  5. 小结
  6. 参考资料

基础概念

switch case 语句通过计算一个表达式的值,并将其与一系列 case 标签中的常量值进行比较。一旦找到匹配的值,就会执行对应 case 标签后面的代码块,直到遇到 break 语句或者 switch 语句结束。如果没有找到匹配的值,并且存在 default 标签,则会执行 default 标签后面的代码块。

使用方法

基本语法

switch (expression) {
    case value1:
        // 代码块 1
        break;
    case value2:
        // 代码块 2
        break;
    // 可以有更多的 case 标签
    default:
        // 默认代码块
}

在上述语法中: - expression 是一个要计算的表达式,其值必须是整型、字符型、枚举类型、String 类型(从 Java 7 开始支持)等允许的类型。 - value1value2 等是常量值,用于与 expression 的值进行匹配。 - break 语句用于终止 switch 语句的执行,跳出 switch 块。如果没有 break 语句,程序会继续执行下一个 case 标签的代码,这就是所谓的穿透行为。

表达式类型

  • 整型(int:这是最常见的类型之一。例如:
int dayOfWeek = 3;
switch (dayOfWeek) {
    case 1:
        System.out.println("Monday");
        break;
    case 2:
        System.out.println("Tuesday");
        break;
    case 3:
        System.out.println("Wednesday");
        break;
    default:
        System.out.println("Other day");
}
  • 字符型(char
char grade = 'B';
switch (grade) {
    case 'A':
        System.out.println("Excellent");
        break;
    case 'B':
        System.out.println("Good");
        break;
    case 'C':
        System.out.println("Average");
        break;
    default:
        System.out.println("Lower grade");
}
  • 枚举类型(enum
enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}

Season season = Season.SUMMER;
switch (season) {
    case SPRING:
        System.out.println("It's spring");
        break;
    case SUMMER:
        System.out.println("It's summer");
        break;
    case AUTUMN:
        System.out.println("It's autumn");
        break;
    case WINTER:
        System.out.println("It's winter");
        break;
}
  • String 类型(从 Java 7 开始支持)
String fruit = "apple";
switch (fruit) {
    case "apple":
        System.out.println("Red and delicious");
        break;
    case "banana":
        System.out.println("Yellow and long");
        break;
    default:
        System.out.println("Other fruit");
}

执行流程

  1. 首先计算 switch 后面 expression 的值。
  2. 然后将这个值与各个 case 标签中的常量值进行逐一比较。
  3. 如果找到匹配的值,就开始执行该 case 标签后面的代码块,直到遇到 break 语句或者 switch 语句结束。
  4. 如果没有找到匹配的值,并且存在 default 标签,则执行 default 标签后面的代码块。

常见实践

简单示例

下面是一个根据数字输出星期几的简单示例:

public class SwitchExample {
    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");
        }
    }
}

多值匹配

有时候我们可能希望多个 case 值执行相同的代码块,可以这样实现:

int num = 3;
switch (num) {
    case 1:
    case 2:
    case 3:
        System.out.println("Number is 1, 2 or 3");
        break;
    default:
        System.out.println("Other number");
}

穿透行为

穿透行为是指在没有 break 语句的情况下,程序会继续执行下一个 case 标签的代码。例如:

int month = 3;
switch (month) {
    case 1:
    case 2:
    case 3:
        System.out.println("This is the first quarter");
    case 4:
    case 5:
    case 6:
        System.out.println("This is the second quarter");
        break;
    default:
        System.out.println("Other months");
}

在这个例子中,当 month 为 3 时,会先输出 This is the first quarter,然后由于没有 break 语句,会继续执行下一个 case 块,输出 This is the second quarter

最佳实践

增强可读性

为了使代码更易读,可以适当添加注释。例如:

// 根据用户输入的数字选择不同的操作
int choice = 2;
switch (choice) {
    case 1:
        // 执行操作 1
        System.out.println("Performing operation 1");
        break;
    case 2:
        // 执行操作 2
        System.out.println("Performing operation 2");
        break;
    default:
        // 处理无效选择
        System.out.println("Invalid choice");
}

避免不必要的穿透

穿透行为在某些情况下很有用,但大多数时候应该避免,因为它可能导致意外的行为。确保在每个 case 块中添加 break 语句,除非你明确知道自己需要穿透行为。

处理默认情况

始终包含 default 块来处理未预期的值。这有助于提高代码的健壮性。例如:

String command = "unknown";
switch (command) {
    case "start":
        // 启动操作
        break;
    case "stop":
        // 停止操作
        break;
    default:
        System.out.println("Unknown command: " + command);
}

小结

switch case 语句是 Java 中一种强大的条件控制结构,它可以使代码更加清晰和简洁。通过理解其基础概念、使用方法、常见实践以及最佳实践,开发者能够更好地运用 switch case 语句来解决各种实际问题。在使用过程中,要注意表达式类型的选择、break 语句的使用以及对默认情况的处理,以确保代码的正确性和可读性。

参考资料

希望这篇博客能帮助你深入理解并高效使用 Java 中的 switch case 语法。如果你有任何疑问或建议,欢迎在评论区留言。