switch-case语句的标准用法:
switch(表达式){
case 常量表达式1:
语句1;
break;
case 常量表达式2:
语句2;
break;
......
default:
语句;
break;
}
例如
int i=3;
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;
}
输出结果是:3
其执行流程为:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句,然后退出switch语句,程序流程转向开关语句的下一个语句。
注意:
1、default就是如果没有符合的case就执行它,default并不是必须的。
2、case后的语句可以不用大括号.
3、switch语句的判断条件可以接受int、byte、char、short,不能接受其他类型。
原因是在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。
4、一旦case匹配,如果没有break,就会顺序执行后面的程序代码,而不管后面的case的表达式是否匹配,直到遇见break,利用这一特性可以让好几个case执行统一语句。所以,通常来讲,break是必须写的。否则如下:public class Test7
{
public static void main(String[] args)
{
int i=5;
switch(i)
{
case 1:
System.out.println("one");
case 10:
System.out.println("ten");
case 5:
System.out.println("five");
case 3:
System.out.println("three");
default:
System.out.println("other");
}
}
}
结果是:
five
three
other
特殊使用:
特殊1:不是完全没有break
int year=2005;
int month=3;
int day;
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day=31;
break;
case 2:
day=28;
break;
case 4:
case 6:
case 9:
case 11:
day=30;
break;
}
结果是:day=31
特殊2:default的位置
int i=1;
switch(i)
{
case 1:
System.out.println(1);
default:
System.out.println("default");
case 2:
System.out.println(2);
break;
case 3:
System.out.println(3);
break;
}
结果是:1
default
2