在Java语言中的流程控制语句中,switch-case可以很好的控制如果...那么的关系,可以说是可以与条件语句替换的语句
基本语法格式
switch(表达式) {
case 常量表达式1:
语句1;
break;
....
case 常量表达式2:
语句2;
break;
default:
语句;
}
通过switch(表达式)来接受参数,再通过case来比较,如果传入的参数等于case后的就执行该判断后的语句。也就是谁先判断到,那谁就是这个流程的操作入口。
- 需要注意的几点
1.switch的表达式可以是:byte、short、int 或者 char。从 Java SE 7 开始, switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面 量。
- switch 可以有多个case,case后必须是常量。
- switch表达式的值结果必须和case后面的表达式类型一致。
- 语句中的break不是必须写的,如果不写,哪个case执行完以后,会接着执行后面的case。写了break,那就执行该条case时候,执行完成后则跳出switch。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
格式优化
我平常的写法是,给每个case后要执行的语句用{}包裹起来,这样看起代码更有条理,一眼就能看出case后需要执行什么代码。
switch(表达式){
case 常量表达式1: {
语句1;
break;
}
....
case 常量表达式2: {
语句2;
break;
}
default:语句;
}
实例
- 所有case都带break
int i=5;
switch(i)
{
case 1: {
System.out.println(1);
break;
}
case 2: {
System.out.println(2);
break;
}
case 3: {
System.out.println(3);
break;
}
default: {
System.out.println("default");
break;
}
}
这种情况,结果是再遇到相对应的case后执行完语句就跳出swihch语句,上面的例子,因为没有匹配的case,则执行default,打印出“default”;
- 存在case不带break
int i=2;
switch(i)
{
case 1: {
System.out.println(1);
break;
}
case 2: {
System.out.println(2);
}
case 3: {
System.out.println(3);
break;
}
default: {
System.out.println("default");
break;
}
}
// 输出打印结果:
2
3
上面的例子,再case判断为2的执行语句中,没有break。当匹配到2的时候,执行打印2,然后再去执行下面的语句。直到case 3中的break跳出switch。
- default的位置
平常写的时候,default都是放组后一个。那如果任意放一个位置呢?
int i=1; // int i = 9;
switch(i){
case 1: {
System.out.println(1);
}
default: {
System.out.println("default");
}
case 2: {
System.out.println(2);
}
case 3: {
System.out.println(3);
}
}
// 输出打印结果:
1
default
2
3
// 把int i 的初始值设置为9,则打印出:
default
2
3
default的功能和case的是一样的,也可以作为一个判断,如果匹配,也成为switch执行的一个入口。