switch
switch分支是Java中另一种条件控制结构,它通过比较表达式的值与各个case标签是否相等,来决定执行哪一段代码。下面详细介绍switch分支的用法。
switch分支的执行流程
switch分支的基本结构如下:
switch (表达式) {
case 值1:
// 当表达式的值等于值1时执行的代码
break; // 可选,用于退出switch语句
case 值2:
// 当表达式的值等于值2时执行的代码
break; // 可选
// 可以有多个case
default:
// 当表达式的值不等于任何case标签时执行的代码
}
示例:
// 电子备忘录示例
String week = "周三";
switch (week) {
case "周一":
System.out.println("学习写代码");
break;
case "周二":
System.out.println("请求同学帮忙");
break;
case "周三":
System.out.println("看篮球比赛");
break;
case "周四":
System.out.println("白天学习");
break;
case "周五":
System.out.println("今晚游戏");
break;
case "周六":
System.out.println("与同学happy");
break;
case "周日":
System.out.println("郁郁寡欢、准备学习");
break;
default:
System.out.println("您输入的星期信息不存在~~~");
}
if 与 switch 的选择
虽然if分支在功能上更为强大,但在某些场景下,switch分支的使用更为直观和方便。
-
使用原则:
- 如果需要对一个范围进行判断,建议使用if分支结构。
- 如果需要判断的值是固定的几个选项之一,建议使用switch分支结构。
switch 注意事项
使用switch分支时,需要注意以下几点:
-
表达式类型:
- JDK 5及以前,表达式类型只能是
byte、short、int、char。 - JDK 5开始支持枚举(
enum)。 - JDK 7开始支持
String。 - 不支持
double、float类型。
- JDK 5及以前,表达式类型只能是
-
case标签:
- 每个case标签后面的值不允许重复,且只能是字面量,不能是变量。
-
break语句:
- 每个case块后通常应该跟一个
break语句,以避免case穿透现象。 - 如果没有
break,则程序会继续执行下一个case块的代码,直到遇到break或switch语句结束。
- 每个case块后通常应该跟一个
演示case穿透现象:
String day = "周三";
switch (day) {
case "周二":
case "周三":
case "周四":
System.out.println("请老师帮帮");
// 注意:这里只有一个break,放在了最后
break;
case "周五":
System.out.println("准备迎接周末");
break;
default:
System.out.println("未知的一天");
}
// 输出:请老师帮帮
在这个例子中,如果day的值是"周二"、"周三"或"周四"中的任何一个,都会执行"请老师帮帮"这行代码,并且由于break语句位于这三个case标签的外面,所以它们会共享相同的执行路径,直到遇到break语句。这就是case穿透现象的一个应用场景。