switch 语句
switch语句是一种控制流语句,用于根据变量的值执行不同的代码块。switch语句提供了一种更清晰的方式来编写多条件分支代码,相对于if-else if-else语句,它可以使代码更加整洁和易读。下面是对Java中switch语句的详细介绍。
基本结构
switch语句的基本结构如下:
switch (expression) {
case value1:
// 当expression的值等于value1时执行的代码
break;
case value2:
// 当expression的值等于value2时执行的代码
break;
// 可以有任意数量的case语句
default:
// 当expression的值不等于任何case值时执行的代码
break;
}
关键字说明
- switch:定义一个基于表达式结果的多分支选择结构。
- case:定义一个分支,当switch表达式的值匹配case值时执行该分支的代码。
- break:用于终止case代码块,防止执行落入下一个case中。如果没有break,程序会继续执行后续的case代码块(即使这些case的值不匹配)。
- default:可选的分支,当switch表达式的值不匹配任何一个case值时执行的代码块。
示例代码
下面是一些具体的例子来说明switch语句的使用。
简单的switch语句
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Tuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:
System.out.println("Invalid day");
break;
}
switch语句中的字符串
从Java 7开始,switch语句支持字符串类型。
String fruit = "Apple";
switch (fruit) {
case "Apple":
System.out.println("Apple is red");
break;
case "Banana":
System.out.println("Banana is yellow");
break;
case "Orange":
System.out.println("Orange is orange");
break;
default:
System.out.println("Unknown fruit");
break;
}
switch语句中的枚举
switch语句也可以用于枚举类型。
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day day = Day.WEDNESDAY;
switch (day) {
case MONDAY:
System.out.println("Monday");
break;
case TUESDAY:
System.out.println("Tuesday");
break;
case WEDNESDAY:
System.out.println("Wednesday");
break;
case THURSDAY:
System.out.println("Thursday");
break;
case FRIDAY:
System.out.println("Friday");
break;
case SATURDAY:
System.out.println("Saturday");
break;
case SUNDAY:
System.out.println("Sunday");
break;
}
注意事项
- 表达式类型:switch表达式的类型可以是byte、short、char、int、String、枚举类型(enum)或其包装类。
- break语句:break语句在switch语句中非常重要,用于终止一个case分支。如果省略break,程序会继续执行下一个case分支,直到遇到break或switch语句结束。
- default分支:default分支是可选的,但建议使用,以处理所有未被匹配的情况。
面试问题
如果匹配到的case执行完没有break,那么会执行下面的default的内容么?
是的,如果匹配到的case分支执行完后没有遇到break语句,程序会继续执行后续的case分支(包括default分支)中的代码,直到遇到break语句或switch语句结束。这种行为被称为“fall-through”。
下面是一个例子,展示了如果没有使用break语句会发生什么:
int day = 3;
switch (day) {
case 1:
System.out.println("Monday");
// 没有break,继续执行下一个case
case 2:
System.out.println("Tuesday");
// 没有break,继续执行下一个case
case 3:
System.out.println("Wednesday");
// 没有break,继续执行下一个case
case 4:
System.out.println("Thursday");
// 没有break,继续执行下一个case
case 5:
System.out.println("Friday");
// 没有break,继续执行下一个case
case 6:
System.out.println("Saturday");
// 没有break,继续执行下一个case
case 7:
System.out.println("Sunday");
// 没有break,继续执行下一个case
default:
System.out.println("Invalid day");
}
在这个例子中,如果day的值是3,输出将是:
mathematica
Wednesday
Thursday
Friday
Saturday
Sunday
Invalid day
这是因为case 3匹配后,所有后续的case分支(包括default)都会被执行,直到switch语句结束。