java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java  switch-case语句

Java中的switch-case语句的语法、特征详解

作者:M.Z.Q

Java中的switch-case语句用于多分支选择,支持多种数据类型,包括整型、字符型、枚举型、字符串等,它提供了一种更清晰、更高效的方式来处理多个条件分支,本文给大家介绍Java中的switch-case语句的语法、特征详解,感兴趣的朋友一起看看吧

switch-case是Java中一种重要的多分支选择结构,它提供了一种更清晰、更高效的方式来处理多个条件分支。本文将全面介绍Java中switch-case语句的语法、特性以及在不同Java版本中的演进。

1. 基础语法结构

Java中switch-case的基本语法如下:

switch (expression) {
    case value1:
        // 代码块1
        break;
    case value2:
        // 代码块2
        break;
    // 可以有任意数量的case语句
    default:
        // 默认代码块
}

1.1 关键组成部分

2. 传统switch-case(Java 7及之前)

2.1 基本示例

int day = 3;
String dayName;
switch (day) {
    case 1:
        dayName = "星期一";
        break;
    case 2:
        dayName = "星期二";
        break;
    case 3:
        dayName = "星期三";
        break;
    case 4:
        dayName = "星期四";
        break;
    case 5:
        dayName = "星期五";
        break;
    default:
        dayName = "周末";
}
System.out.println(dayName); // 输出:星期三

2.2 注意事项

int num = 2;
switch (num) {
    case 1:
        System.out.println("一");
    case 2:
        System.out.println("二"); // 会执行
    case 3:
        System.out.println("三"); // 也会执行
    default:
        System.out.println("其他"); // 也会执行
}
// 输出:
// 二
// 三
// 其他

3. Java 7增强:支持字符串

从Java 7开始,switch支持String类型:

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

注意​:字符串比较是区分大小写的,且不能为null

4. Java 12+新特性:switch表达式

Java 12引入了更简洁的switch表达式(正式成为标准特性是在Java 14):

4.1 箭头语法(->)

int day = 3;
String dayName = switch (day) {
    case 1 -> "星期一";
    case 2 -> "星期二";
    case 3 -> "星期三";
    case 4 -> "星期四";
    case 5 -> "星期五";
    default -> "周末";
};
System.out.println(dayName); // 输出:星期三

4.2 yield返回值(Java 13+)

对于多行代码块,可以使用yield返回值:

String fruit = "apple";
String description = switch (fruit) {
    case "banana" -> "黄色的弯曲水果";
    case "apple" -> {
        String color = "红色";
        yield color + "的圆形水果";
    }
    case "orange" -> "橙色的柑橘类水果";
    default -> "未知水果";
};
System.out.println(description); // 输出:红色的圆形水果

4.3 多case组合

int month = 2;
int days = switch (month) {
    case 1, 3, 5, 7, 8, 10, 12 -> 31;
    case 4, 6, 9, 11 -> 30;
    case 2 -> {
        // 这里可以添加更复杂的逻辑
        yield 28; // 简化的闰年判断
    }
    default -> throw new IllegalArgumentException("无效月份: " + month);
};
System.out.println(days); // 输出:28

5. 现代switch 表达式语法结构 (Java 14+)

result = switch (expression) {
    case value1 -> expression1;
    case value2 -> {
        // 代码块
        yield result;
    }
    case value3, value4 -> expression3; // 多case
    default -> defaultExpression;
};

6. 完整 switch-case 语法元素图

7. 执行流程图

8. 历史演进

9. 与传统if-else的比较

9.1 选择依据

情况

推荐使用

固定值比较

switch-case

范围比较

if-else

少量条件

if-else

多条件(>3)​

switch-case

需要类型检查

if-else

枚举/字符串匹配

switch-case

9.2 性能考虑

10. 最佳实践

String input = null;
if (input == null) {
    System.out.println("输入不能为null");
    return;
}
// 后续switch处理
enum Color { RED, GREEN, BLUE }
Color color = Color.RED;
switch (color) {
    case RED -> System.out.println("红色");
    case GREEN -> System.out.println("绿色");
    case BLUE -> System.out.println("蓝色");
}

11. 常见错误与陷阱

// 错误示例
double value = 1.0;
switch (value) { // 编译错误
    // ...
}

12. 实际应用示例

12.1 状态机实现

enum State { START, PROCESSING, FINISHED }
State current = State.START;
switch (current) {
    case START -> {
        System.out.println("开始处理");
        current = State.PROCESSING;
    }
    case PROCESSING -> {
        System.out.println("处理中...");
        current = State.FINISHED;
    }
    case FINISHED -> System.out.println("已完成");
}

12.2 命令行工具

String command = "help";
switch (command.toLowerCase()) {
    case "start" -> startService();
    case "stop" -> stopService();
    case "restart" -> restartService();
    case "help", "?" -> showHelp();
    default -> System.out.println("未知命令: " + command);
}

12.3 游戏开发

char input = 'w';
switch (input) {
    case 'w', 'W' -> movePlayer(0, 1);  // 上
    case 'a', 'A' -> movePlayer(-1, 0); // 左
    case 's', 'S' -> movePlayer(0, -1); // 下
    case 'd', 'D' -> movePlayer(1, 0);  // 右
    default -> System.out.println("无效输入");
}

总结

Java的switch-case语句从最初的基本形式发展到现在的switch表达式,提供了更强大、更灵活的多分支选择能力。关键要点:

随着Java语言的演进,switch-case仍然是处理多分支逻辑的高效工具,特别是在代码可读性和维护性方面具有明显优势。

到此这篇关于Java中的switch-case语句的语法、特征详解的文章就介绍到这了,更多相关java switch-case语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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