一. 简介
switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个分支。switch语句在执行时,会先进行值的匹配,匹配成功时会进入到对应case语句。再根据是否有 break语句,判断是否继续输出,或是跳出当前switch判断。
1. 基本语法
在使用switch之前,首先我们得记住它的基本语法结构,其基本语法格式如下:
switch(值){
case 值1:
//switch中的值与值1相等时执行的代码
break; //可选
case 值2:
//switch中的值与值2相等时执行的代码
break; //可选
case 值3:
//switch中的值与值3相等时执行的代码
break; //可选
case 值4:
//switch中的值与值4相等时执行的代码
break; //可选
default:
//switch中的值与以上所有值都不相等时执行的代码
break; //可选
}
那么这个语法具体有哪些要求呢?请继续往下看。
2. 语法规则(重点)
根据上面介绍的switch语法结构,壹哥再给大家详细说一下switch的语法规则和要求。
● switch(值)语句中的”值“,支持的类型有如下几类:
● 整型:byte、short、int 、char及其对应的包装类;
● 枚举类型,从JDK 5开始支持(后面壹哥会详细讲解枚举类型);
● String类型,从JDK 7开始支持,同时case标签后的值必须是字符串常量或字面量。
● switch后面可以有多个 case 语句,每个 case 后都要跟一个待比较的值和冒号。
● case标签后面值的数据类型必须与switch(值)中的数据类型相同,且只能是常量或者字面常量。
● 当switch(值)的值与 case语句中的值相等时,case标签后面的语句开始执行,遇到break标签时停止执行switch语句。
● case语句中不一定非要带有break语句。如果case后没有 break 语句,程序会继续执行下一个case 语句,直到出现 break 语句,这种现象叫做”case穿透“。
● switch语句中可以包含一个default默认分支,该分支一般是 switch 语句的最后一个分支,当switch的值和case语句的值不相等时执行。default 分支中不用带有break 语句,另外该分支可以放在任何位置,但建议写在最后面。
3. 执行逻辑
根据上面的语法规则,我们可以结合下图来理解switch语句的执行逻辑。switch的执行逻辑,其实就相当于是把多种情况分别列出,根据我们输入的值来判断符合哪种情况。符合哪个情况,就进入到对应的分支里面去执行,整体的执行逻辑就是这样的,如下图所示:
了解完这些理论内容之后,接下来壹哥就给大家设计几个switch的案例,我们一起动手实操起来吧。
二. switch案例
1. 基本案例
案例需求:输入一个序号,代表今天是星期几,选择今天要做的事情。
public class Demo01 {
public static void main(String[] args) {
// switch结构
Scanner sc=new Scanner(System.in);
//根据输入的数字,选择每天要做的事情
System.out.println("请输入日期序号,代表今天是星期几");
int day = sc.nextInt();
switch (day) {
case 0:
System.out.println("星期天,休息休息");
break;
case 1:
System.out.println("星期一,开始搬砖");
break;
case 2:
System.out.println("星期二,搬砖好累");
break;
case 3:
System.out.println("星期三,离周末还有3天");
break;
case 4:
System.out.println("星期四,明天就是周五啦");
break;
case 5:
System.out.println("星期五,明天就是周六啦");
break;
case 6:
System.out.println("星期六,开心.....");
break;
default:
System.out.println("希望天天都是周末...");
break;
}
}
2. case穿透
壹哥在前面给大家讲过,如果 case 语句中没有 break 语句,当switch里的数值与case匹配成功后,会从当前 case 开始,把后续所有的 case 语句也都执行,这种现象叫做case穿透。一般情况下,我们要避免出现case穿透,防止一下执行多个语句。但有些时候,我们也可以利用这一特性,故意进行”穿透“。比如有几种情况的处理策略一样时,就可以通过”穿透“减少代码的编写。
接下来壹哥通过一个案例来给大家演示穿透现象。案例需求:选择A,输出”优秀“;选择B:输出”良好“;选择C:输出”一般“;选择D、E等:输出”很差“,其他情况则默认处理。不区分大小写,即选择A和a是一样的结果。
public class Demo01 {
public static void main(String[] args) {
// switch结构-case穿透
Scanner sc=new Scanner(System.in);
// 根据输入的数字,选择每天要做的事情
System.out.println("请输入成绩等级");
String level = sc.next();
switch (level) {
case "a":
case "A":
System.out.println("优秀");
break;
case "b":
case "B":
System.out.println("良好");
break;
case "c":
case "C":
System.out.println("一般");
break;
case "d"://故意case穿透
case "D":
case "E":
case "F":
System.out.println("很差");
break;
default:
System.out.println("成绩无效");
break;
}
}