1. switch语句
* 格式:
switch (表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
* 执行流程:
Ⅰ. 首先计算表达式的值,得出一个具体的值,并不是一个布尔类型的了。
Ⅱ. 依次和case后面的值进行比较,如果匹配上,就会执行相应的语句,在执行的过程中,遇到break就会结束整个switch语句。
Ⅲ. 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,之后遇到default里的break语句,再结束整个switch语句。
* 格式说明:
|. 表达式:取值为byte,short,int,char。JDK5以后可以是枚举,JDK7以后可以是String。(将要匹配的值)
Ⅱ. case:后面跟的是要和表达式进行比较的值,case后的值的类型要跟switch后()里的值的类型一致。(被匹配的值)
Ⅲ. break:表示中断,结束的意思,用来结束switch语句。
Ⅳ. default:表示所有的情况都不匹配时,就执行该处的内容,和if语句中的else类似。它是一个特殊的case
Ⅴ. case后面跟的值只能是字面量(常量),不能是变量。
Ⅵ. case后面跟的值不允许重复。
* 注意事项:
a. 注释快捷键为:Ctrl + shift + /
b. default可以写在switch语句的任意位置,但通常习惯写在最后。(不论default写在哪,程序都是先匹配case值,等所有case值都匹配结束后,若没有匹配上,再去找default)
c. default可以省略,语法不会报错,但通常习惯不省略,因为省略后,相当于default里的语句为空,若所有的case都不匹配,就不会执行任何语句,直接结束switch语句。
d. case穿透:语句体中没有写break导致的。switch语句的执行流程是:首先拿着小括号中表达式的值依次和所有的case进行匹配,如果匹配上了,就会执行对应的语句体,如果此时语句体中有break语句了,就会结束整个switch语句,如果这个语句体没有break语句,程序就会继续执行下一个case的语句体,一直到遇到break语句,或者右大括号位置。
如果default的语句体中没有break,且default的位置在两个case之间的话,当程序没有匹配到case的值时,它就会执行default的语句体,之后他会继续执行default的下一个case语句体,并一直到遇到break语句,或者右大括号位置。
使用场景:如果多个case的语句体重复了,我们可以考虑用case穿透来简化代码。
e. switch的新特性(jdk1.12之后才有的):
//老写法
int number = 1;
switch (number){
case 1:
System.out.println(“一”);
break;
case 2:
System.out.println(“二”);
break;
case 3:
System.out.println(“三”);
break;
default:
System.out.println(“没有这个数字”);
break;
}
//新写法,break可以省略,也没有case穿透现象。
int number = 1;
switch (number){
case 1 -> {
System.out.println(“一”);
}
case 2 -> {
System.out.println(“二”);
}
case 3 -> {
System.out.println(“三”);
}
default -> {
System.out.println(“没有这个数字”);
}
}
//若语句体中只有一条语句,大括号也可以不写
int number = 1;
switch (number){
case 1 -> System.out.println(“一”);
case 2 -> System.out.println(“二”);
case 3 -> System.out.println(“三”);
default -> System.out.println(“没有这个数字”);
}
//在旧jdk版本下,需要使用case穿透现象的写法。
Scanner sc = new Scanner (System.in);
int number = sc.nextInt();
switch (number){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println(“工作日”);
break;
case 6:
case 7:
System.out.println(“休息日”);
break;
default:
System.out.println(“没有这个星期”);
break;
}
//若在新jdk版本下,需要使用case穿透现象来简化代码可以这样
Scanner sc = new Scanner (System.in);
int number = sc.nextInt();
switch (number){
case 1,2,3,4,5 -> System.out.println(“工作日”);
case 6,7 -> System.out.println(“休息日”);
default -> System.out.println(“没有这个星期”);
}
f. switch和if的第三种格式的使用情况:
if的第三种格式:一般用于对范围的判断。
switch:一般用于把有限个具体的数一一列举出来,让我们任选其一。