1.switch分支的简单概括:
就是匹配条件去执行它的分支,适合做值匹配的分支选择,总体结构清晰,合适规整良好.
2.switch语句的格式:
switch(表达式){
case 值1:
执行代码...;
break;
case 值2:
执行代码...;
break;
......
case 值n-1:
执行代码...;
break;
default:
执行代码...;
}
3.switch执行流程:
①先执行表达式的值,拿着这个值去跟case后的值相匹配.
②匹配到哪个值为true就执行哪个case,遇到break就跳出switch分支.
③如果case后的值都不匹配则执行default代码.
案例1
public static void main(String[] args){
String weekday = "周五";//先定义一个字符串String
switch (weekday){
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;
}
}
运行截图:
4.switch分支注意事项:
①表达式类型只能是byte,short,int,char,JDK5开始支持枚举,JDK7开始支持String,不支持double,float和long.
②case给出的值不允许重复且只能是字面量,不可以是变量!
③不要忘记写break,否则会出现穿透现象(下面会介绍).
5.switch的穿透性
解释:如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而不会进行任何匹配),直到遇到break才会跳出分支,这就是switch的穿透性.
案例2(switch的穿透性)
需求:用户输入月份可以展示该月份的天数(先不涉及键盘录入)
(1)1,3,5,7,8,10,12月份是31天
(2)2月份是闰年为29天,非闰年为28天.
(3)4,6,9,11月份是30天.
①写上break的情况
public static void main(String[] args) {
int month = 7;
switch(month){
case 1:
System.out.println(month + "月是31天!");
break;
case 3:
System.out.println(month + "月是31天!");
break;
case 5:
System.out.println(month + "月是31天!");
break;
case 7:
System.out.println(month + "月是31天!");
break;
case 8:
System.out.println(month + "月是31天!");
break;
case 10:
System.out.println(month + "月是31天!");
break;
case 12:
System.out.println(month + "月是31天!");
break;
case 2:
System.out.println(month + "月闰年为29天,非闰年为28天!");
break;
case 4:
System.out.println(month + "月是30天!");
break;
case 6:
System.out.println(month + "月是30天!");
break;
case 9:
System.out.println(month + "月是30天!");
break;
case 11:
System.out.println(month + "月是30天!");
break;
default:
System.out.println("没有该月份!");
}
}
出现的问题:会产生过多的重复的代码,造成代码冗余.
②不写break,代码如下:
public static void main(String[] args) {
int month = 7;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "月是31天!");
break;
case 2:
System.out.println(month + "月闰年为29天,非闰年为28天!");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "月是30天!");
break;
default:
System.out.println("没有该月份!");
}
}
6.switch的穿透性可以解决的问题:
存在多个case块功能代码一样时,可以用穿透性把流程集中到同一处处理,这样可以简化代码.