switch语句格式:
switch(表达式){
case 常量1 :
语句体1;
break;
case 常量2 :
语句体2;
break;
case 常量3 :
语句体3;
break;
……
default:
语句体;
}
switch语句注意事项
单词解释:case 情况,break 打断/结束,default 默认
switch语句表达式:
表达式支持的数据类型:
- jdk1.5之前只支持 byte、short、int、char类型
- jdk1.5时支持枚举类型
- jdk1.7时支持String类型
总而言之现在的switch后的小括号里的表达式支持byte、short、int、char、枚举、String,这些类型的数据。
case语句注意事项
- case 后面只能跟常量,并且数据类型要和表达式里的数据类型一致。
- 每条语句体的后面要跟一个break语句,否则会出现case穿透。
- 如果该条case语句在末尾的default语句前面,可以不加break。
default语句注意事项
- default语句可以放到任意的位置,都是最后执行,但是要注意的是如果default语句不是放到最后面,那最后一条case语句要加上break
什么是case穿透
先看下面两种代码的输出结果
class Test {
public static void main (String[] args){
int a = 4;
switch(a) {
case 1 :
System.out.println("一月份");
break;
case 4 :
System.out.println("4月份");
break;
case 5 :
System.out.println("5月份");
break;
default:
System.out.println("请重新输入:");
}
}
}
我们都知道上诉代码输出的结果为:
- 四月份
那么我们看下面这个代码
class Test {
public static void main (String[] args){
int a = 4;
switch(a) {
case 1 :
System.out.println("一月份");
break;
case 4 :
System.out.println("4月份");
case 5 :
System.out.println("5月份");
break;
default:
System.out.println("请重新输入:");
}
}
}
上面这个代码输出的结果为:
- 4月份
- 5月份
为什么会这样呢?-- 因为这就是case语句后没有跟break语句,就发生了case穿透,执行case 4语句以后因为没有break语句,则会继续往下执行,执行case 5语句后遇到break语句则终止执行。
case穿透的利用
多个情况如果是相同的执行逻辑时,我们就可以使用,比如让你输入一个月份来判断是四季里的哪个季节我们就可以利用case穿透
import java.util.Scanner;
class Test {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查询的月份:");
int i = nextInt();
switch(i){
case 3:
case 4:
case 5:
System.out.println("这个月份的季节为春天!");
break;
case 6:
case 7:
case 8:
System.out.println("这个月份的季节为夏天!");
break;
case 9:
case 10:
case 11:
System.out.println("这个月份的季节为秋天!");
break;
case 12:
case 1:
case 2:
System.out.println("这个月份的季节为冬天!");
break;
default:
System.out.println("请输入正确的月份!");
}
}
}