本帖最后由 王宝康 于 2012-7-19 15:58 编辑
switch语句为多路分支语句,它的基本语法为:
switch (expr) {
case value1:
statements;
break;
...
case valueN:
statements;
break;
default:
statements;
break;
}
switch语句的使用注意事项:
a、
在switch(expr)语句中,expr表达式的类型必须是与int类型兼容的基本类型,所谓与int类型兼容,就是指能自动转换为int类型,因为expr表达式的合法类型包括byte、 short、char和int类型,long和浮点类型不能自动转换为int类型,因此不能作为expr表达式的类型。
double d = 11.2;
switch(d){//编译出错,类型不匹配
}
b、在case valueN子句中,valueN必须满足以下条件:
1、valueN的类型必须是与int类型兼容的基本类型,包括byte、 short、char和int类型
2、valueN必须是常量
3、各个case子句的valueN表达式的值不同
int x = 4,y = 3;
.final byte z = 4;
switch (x) {
case 1://合法
System.out.println("1");
break;
case 4/3+1://合法,4/3+1为int类型的常量表达式
System.out.println("2");
break;
case 1://编译出错,不允许出现重复的case表达式
System.out.println("repeat 1");
break;
case y://编译出错,y不是常量
System.out.println("3");
break;
case z://合法,z是与int兼容的常量
System.out.println("4");
break;
case 5,6,7://编译出错,case表达式的语法不正确
System.out.println("5,6,7");
break;
default:
break;
}
int x = 4,y = 3;
final byte z = 4;
switch (x) {
case 1://合法
System.out.println("1");
break;
case 4/3+1://合法,4/3+1为int类型的常量表达式
System.out.println("2");
break;
case 1://编译出错,不允许出现重复的case表达式
System.out.println("repeat 1");
break;
case y://编译出错,y不是常量
System.out.println("3");
break;
case z://合法,z是与int兼容的常量
System.out.println("4");
break;
case 5,6,7://编译出错,case表达式的语法不正确
System.out.println("5,6,7");
break;
default:
break;
}
c、在switch语句中最多只能有一个default子句,default子句是可选的。当switch表达式的值不与任何case子句匹配时,程序执行default子句,假如没有default子句,则程序直接跳出switch语句,default子句可以位于switch语句中的任何位置,通常都将default子句放在所有case子句的后面
d、如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从这个case子句或者default子句开始执行,假如遇到break语句,就跳出整个switch语句,否则一次执行switch语句中的后续的case子句,不再检查case表达式的值
int x = 5;
switch (x) {
default:
System.out.println();//x与default情况匹配,因此从这行开始执行
break;
case 1:
System.out.println("case1");
case 2:
System.out.println("case2");
case 3:
System.out.println("case3"); break;
case 4:
System.out.println("case4");
}
以上代码的打印结果为:
default
case1
case2
case3
int x = 5;
switch (x) {
default:
System.out.println();//x与default情况匹配,因此从这行开始执行
break;
case 1:
System.out.println("case1");
case 2:
System.out.println("case2");
case 3:
System.out.println("case3"); break;
case 4:
System.out.println("case4");
}
以上代码的打印结果为:
default
case1
case2
case3
e、switch语句的功能也可以用if...else语句来实现
在某些情况下,假如决定流程分支的条件表达式的类型与int类型兼容,则使用switch语句会使程序更加简洁,可读性更强。而if...else语句的功能比switch语句的功能更强大,它能够灵活控制各种复杂的流程分支。
更多关于循环控制的用法与知识点,可以看一下我的博客中关于循环控制的一些总结,http://blog.csdn.net/wangbaokangfei/article/details/7759045 |