Java switch语句使用详解

switch语句是Java中的一种多分支选择结构,用于根据表达式的值选择执行不同的代码块。相比if-else结构,switch在某些情况下可以使代码更清晰、更易读。

图片[1]_Java switch语句使用详解_知途无界

基本语法

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

组成部分详解

  1. expression​:
    • 可以是byte、short、char、int(Java 7之前)
    • Java 7+支持String类型
    • Java 12+支持枚举和包装类(如Integer)
  2. case value​:
    • 必须是与expression类型相同的常量表达式
    • 不能有重复的case值
  3. break​:
    • 用于退出switch语句
    • 如果没有break,会继续执行下一个case(称为”case穿透”)
  4. default​:
    • 可选的,当没有匹配的case时执行
    • 可以放在任何位置,但通常放在最后

使用示例

基本示例

int day = 4;
switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三");
        break;
    case 4:
        System.out.println("星期四");
        break;
    case 5:
        System.out.println("星期五");
        break;
    case 6:
        System.out.println("星期六");
        break;
    case 7:
        System.out.println("星期日");
        break;
    default:
        System.out.println("无效的数字");
}

字符串匹配(Java 7+)

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

枚举类型

enum Color { RED, GREEN, BLUE }

Color color = Color.RED;
switch (color) {
    case RED:
        System.out.println("红色");
        break;
    case GREEN:
        System.out.println("绿色");
        break;
    case BLUE:
        System.out.println("蓝色");
        break;
}

故意使用case穿透

int month = 2;
int year = 2020;
int numDays = 0;

switch (month) {
    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
        numDays = 31;
        break;
    case 4: case 6: case 9: case 11:
        numDays = 30;
        break;
    case 2:
        if (((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
            numDays = 29;
        else
            numDays = 28;
        break;
    default:
        System.out.println("无效的月份");
        break;
}

Java 12+的新特性

从Java 12开始,switch表达式有了更简洁的写法:

箭头语法(->)

int day = 3;
String dayType = switch (day) {
    case 1, 2, 3, 4, 5 -> "工作日";
    case 6, 7 -> "周末";
    default -> "无效的天数";
};
System.out.println(dayType);

yield返回值

int num = 2;
String result = switch (num) {
    case 1 -> "一";
    case 2 -> {
        System.out.println("这是数字2");
        yield "二";
    }
    case 3 -> "三";
    default -> "其他";
};

注意事项

  1. case穿透​:忘记写break可能导致意外的行为
  2. default位置​:虽然可以放在任何位置,但通常放在最后
  3. null检查​:switch表达式不能为null,否则会抛出NullPointerException
  4. 类型限制​:case值必须与switch表达式类型兼容
  5. 性能考虑​:对于大量分支,switch通常比if-else更高效

最佳实践

  1. 总是包含default case,即使你认为不需要
  2. 对于复杂的逻辑,考虑使用策略模式代替大型switch语句
  3. 在Java 12+中,优先使用新的switch表达式语法
  4. 保持每个case简洁,复杂的逻辑应该提取到方法中

通过合理使用switch语句,可以使代码更加清晰和易于维护。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞27 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容