太阳集团城8722(中国·Macau)有限公司-Official website

掌握太阳集团城8722最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

Java switch语句用法详解

在 Java 编程中,switch 语句是一种非常实用的流程控制结构,常用于处理多个固定值的条件判断。与 if-else 语句相比,switch 更加简洁、清晰,尤其适合处理枚举、整型、字符串等具有固定值集合的判断场景。随着 Java 版本的演进,switch 语句在 Java 12 引入表达式写法后,变得更加灵活和强大。本文将详细解析 Java 中 switch 语句的基本用法、语法结构、新特性以及实际应用技巧,帮助开发者更好地掌握这一常用控制结构。

一、switch 语句的基本语法结构

switch 语句的基本语法如下:

switch (表达式) {
    case 值1:
        // 代码块1
        break;
    case 值2:
        // 代码块2
        break;
    ...
    default:
        // 默认代码块
}

表达式:必须是一个可枚举的类型,如 byte、short、int、char、String 和 enum;

case 后的值必须是常量,不能是变量或表达式;

default 是可选的,用于处理未匹配到任何 case 的情况;

break 用于跳出当前分支,避免“穿透”现象(fall-through)。

示例:

int day = 3;
switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    default:
        System.out.println("其他");
}

该示例输出:星期三

二、switch 语句支持的数据类型

Java 中的 switch 语句对数据类型有严格的限制,仅支持以下类型:

基本数据类型:byte、short、int、char;

封装类型:Byte、Short、Integer、Character;

字符串类型(Java 7 开始支持):String 类型可以用于 switch 条件判断;

枚举类型(Java 5 开始支持):枚举是 switch 的理想搭配,逻辑清晰,可读性高。

示例(字符串):

String fruit = "apple";
switch (fruit) {
    case "apple":
        System.out.println("苹果");
        break;
    case "banana":
        System.out.println("香蕉");
        break;
    default:
        System.out.println("未知水果");
}

示例(枚举):

enum Day { MONDAY, TUESDAY, WEDNESDAY }
public class Test {
    public static void main(String[] args) {
        Day day = Day.WEDNESDAY;
        switch (day) {
            case MONDAY:
                System.out.println("周一");
                break;
            case TUESDAY:
                System.out.println("周二");
                break;
            case WEDNESDAY:
                System.out.println("周三");
                break;
        }
    }
}

三、switch 语句的执行流程与注意事项

switch 语句的执行流程如下:

首先计算 switch 括号中的表达式;

然后从 case 中查找匹配的值;

如果找到匹配项,执行对应的代码块;

如果没有 break,程序会继续执行后续的 case,这就是“穿透”现象;

如果没有匹配项,则执行 default 分支(如果存在)。

常见注意事项:

  1. 不要忘记写 break

如果没有 break,程序会继续执行后续 case 中的代码,导致逻辑错误。

int num = 1;
switch (num) {
    case 1:
        System.out.println("值为1");
    case 2:
        System.out.println("值为2");
}

输出:

值为1
值为2

因为缺少 break,程序会继续执行后续分支。

  1. case 后必须是常量

case 后面的值必须是编译时常量,不能是变量或运行时计算的值。

final int VALUE = 10;
switch (num) {
    case VALUE: // 正确,因为是 final 常量
        ...
}
  1. default 分支是可选的

虽然 default 不是必须的,但建议始终添加,以应对未匹配的情况。

允许多个 case 共用一个代码块

如果多个 case 执行相同的逻辑,可以合并写法:

switch (num) {
    case 1:
    case 2:
    case 3:
        System.out.println("1-3");
        break;
    default:
        System.out.println("其他");
}
  1. 注意空指针异常

当使用 String 类型作为 switch 条件时,如果字符串为 null,会抛出 NullPointerException,因此应先进行非空判断。

String fruit = null;
switch (fruit) { // 抛出 NullPointerException
    ...
}
  1. case 值不能重复

同一个 switch 语句中,case 的值必须唯一,否则编译错误。

  1. case 值不能是范围

switch 不支持写如 case 1..5: 这样的范围写法,需手动判断。

四、Java 12 引入的新写法(switch 表达式)

从 Java 12 开始,switch 语句引入了新的表达式写法,支持使用 -> 语法,使代码更加简洁,且支持返回值。

  1. 新写法示例:

int day = 3;
String result = switch (day) {
    case 1 -> "周一";
    case 2 -> "周二";
    case 3 -> "周三";
    default -> "未知";
};
System.out.println(result); // 输出:周三
  1. 新特性优势:

语法更简洁:使用 -> 代替 case 和 break;

支持返回值:可以作为表达式返回值;

防止穿透:每个 case 独立执行,避免误写 break;

支持 throw 语句:可以在 switch 表达式中抛出异常;

  1. 新写法示例(带返回值):

int score = 85;
String grade = switch (score / 10) {
    case 9, 10 -> "A";
    case 8 -> "B";
    case 7 -> "C";
    default -> "D";
};
System.out.println(grade); // 输出:B

五、switch 语句的典型使用场景

  1. 根据枚举进行逻辑判断

switch 与枚举结合使用,是 Java 中最推荐的用法之一,代码清晰、可读性强。

  1. 实现菜单选择功能

在控制台程序或简单 UI 中,switch 常用于实现菜单逻辑:

char choice = 'B';
switch (choice) {
    case 'A':
        System.out.println("新增");
        break;
    case 'B':
        System.out.println("编辑");
        break;
    case 'C':
        System.out.println("删除");
        break;
    default:
        System.out.println("无效操作");
}
  1. 处理 HTTP 状态码或错误码

在网络编程中,switch 可用于处理不同的状态码:

int statusCode = 404;
switch (statusCode) {
    case 200:
        System.out.println("请求成功");
        break;
    case 404:
        System.out.println("资源未找到");
        break;
    default:
        System.out.println("其他错误");
}
  1. 实现状态机逻辑

在业务逻辑中,如订单状态流转、任务状态管理等,switch 语句可以清晰表达状态判断:

String status = "processing";
switch (status) {
    case "pending":
        System.out.println("等待处理");
        break;
    case "processing":
        System.out.println("处理中");
        break;
    case "completed":
        System.out.println("已完成");
        break;
    default:
        System.out.println("未知状态");
}
  1. 简化 if-else 判断

当有多个离散的条件判断时,使用 switch 可以提高代码可读性,减少 if-else 嵌套。

  1. 配合枚举实现策略模式

switch 与枚举结合,可以实现简单的策略模式:

enum Operation {
    ADD, SUBTRACT, MULTIPLY, DIVIDE;
}
double calculate(Operation op, double a, double b) {
    return switch (op) {
        case ADD -> a + b;
        case SUBTRACT -> a - b;
        case MULTIPLY -> a * b;
        case DIVIDE -> a / b;
    };
}

Java switch语句用法详解

switch 语句是 Java 中处理多条件分支的重要工具,其语法简洁、结构清晰,特别适合用于处理枚举、整型、字符串等具有固定值的条件判断。从 Java 12 开始,switch 引入了表达式写法,进一步提升了其灵活性和可读性。

声明:所有来源为“澳门太阳集团城网址8722”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 航班订票查询

    通过出发地、目的地、出发日期等信息查询航班信息。

    通过出发地、目的地、出发日期等信息查询航班信息。

  • 火车订票查询

    通过站到站查询火车班次时刻表等信息,同时已集成至太阳集团城8722MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。

    通过站到站查询火车班次时刻表等信息,同时已集成至太阳集团城8722MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。

  • 车辆过户信息查询

    通过车辆vin码查询车辆的过户次数等相关信息

    通过车辆vin码查询车辆的过户次数等相关信息

  • 银行卡五元素校验

    验证银行卡、身份证、姓名、手机号是否一致并返回账户类型

    验证银行卡、身份证、姓名、手机号是否一致并返回账户类型

  • 高风险人群查询

    查询个人是否存在高风险行为

    查询个人是否存在高风险行为

0512-88869195
数 据 驱 动 未 来
Data Drives The Future
XML 地图