java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java switch语句使用

Java switch语句的使用详解

作者:晚夜微雨问海棠呀

Java switch语句随JDK演进支持int/char、String及模式匹配,具备表达式限制、穿透控制、作用域隔离等特性,适用于状态机、命令解析等场景,需注意类型兼容性及break使用,推荐使用箭头语法和编译器优化提升代码质量

Java switch语句

一、基础语法演进

// 传统形式 (Java 1.0+)
switch (表达式) {
    case 常量1:
        语句;
        break; // 防止穿透
    case 常量2:
        语句;
        break;
    default:
        默认处理;
}

// 增强模式 (Java 12+)
switch (表达式) {
    case 常量1 -> 语句; // 自动阻断穿透
    case 常量2, 常量3 -> { // 多case合并
        复合语句;
    }
    default -> 默认处理;
}

二、核心特性

表达式限制

类型匹配规则

Object obj = "test";
switch (obj) {
    case Integer i -> System.out.println("整数");
    case String s -> System.out.println(s.length());
    default -> System.out.println("未知类型");
}

返回值支持 (Java 14+)

使用yield返回值的表达式形式:

int code = switch (day) {
    case MONDAY -> 1;
    case TUESDAY -> {
        System.out.println("周二");
        yield 2;
    }
    default -> 0;
};

三、关键机制

穿透控制

作用域隔离

每个case块形成独立作用域:

switch (x) {
    case 1 -> {
        String msg = "one"; // 仅在此块有效
    }
    case 2 -> {
        String msg = "two"; // 允许同名变量
    }
}

四、典型应用场景

场景示例
状态机处理订单状态流转判断
命令解析CLI参数匹配执行
类型分发处理多态替代方案

五、常见错误示例

错误类型错误代码修正方案
缺失breakcase 1: doA(); case 2: doB();添加break或改用箭头语法
重复case值case 10: case 10:确保case常量唯一
类型不兼容switch(3.14)转换为支持的类型

六、最佳实践

防御性编程

switch (status) {
    case SUCCESS -> handleSuccess();
    case FAILURE -> handleFailure();
    default -> throw new IllegalStateException(); // 强制覆盖所有情况
}

模式匹配优化 (Java 17+)

switch (obj) {
    case null -> System.out.println("空值");
    case String s when s.length()>5 -> System.out.println("长字符串");
    case Integer i && i > 0 -> System.out.println("正整数");
}

性能优化

七、代码风格建议

case JANUARY, MARCH, MAY, 
     JULY, AUGUST -> days = 31;

扩展思考

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文