上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.4 switch实例
从前面的案例中可以看出,在执行时,switch找到与判断表达式值匹配的case进行执行,每次执行一个case。其实,这只是switch的基本执行流程,最根本的执行流程并非如此。
根本的执行流程如下:switch语句将判断表达式的值与case后面表达式的值进行匹配,找到匹配的case,从此case开始执行,若没有匹配的case但有default,则从default开始执行,直至遇到break语句或者switch语句结束为止。
下面的程序说明了这个问题。
1 //代码实现 2 public class Sample4_3 3 { 4 public static void main(String args[]) 5 { 6 int a=1; 7 switch(a) 8 { 9 case 1: 10 System.out.print("这是1 "); 11 case 2: 12 System.out.print("这是2 "); 13 break; 14 case 3: 15 System.out.print("这是3 "); 16 } 17 System.out.println("\n"); 18 a=4; 19 switch(a) 20 { 21 case 1: 22 System.out.print("这是1 "); 23 default: 24 System.out.print("这是default "); 25 case 2: 26 System.out.print("这是2 "); 27 break; 28 case 3: 29 System.out.print("这是3 "); 30 } 31 System.out.println("\n"); 32 } 33 }
编译运行后,其结果如图4-10所示。
图4-10 Sample4_3的编译运行结果
从图4-10中可以看出:
· 第一个switch语句由于a的值为1,故与“case 1:”匹配,从其开始执行,直至遇到“break”,打印“这是1这是2”。
· 第二个switch语句由于a的值为4,没有匹配的case,所以从default开始执行,直至遇到“break”,打印“这是default这是2”。
提示:在Java中并没有规定default与其他case之间的顺序,可以将其放在任何位置。但是为了增强代码的可读性,一般放在最后。
这种执行流程的好处是可以方便地合并处理不同的case,请读者考察如下程序。
1 //代码实现 2 public class Sample4_4 3 { 4 public static void main(String args[]) 5 { 6 int a=8; 7 switch(a) 8 { 9 case 1: 10 case 3: 11 case 9: 12 System.out.println("情况1,3,9"); 13 break; 14 case 2: 15 case 4: 16 case 5: 17 System.out.println("情况2,4,5"); 18 break; 19 case 6: 20 case 7: 21 case 8: 22 System.out.println("情况6,7,8"); 23 break; 24 } 25 26 } 27 }
· 本段代码功能是处理9种不同的情况,其中情况1、3、9的处理方法相同,情况2、4、5的处理方法相同,情况6、7、8的处理方法相同。
· 通过把处理相同的case写在一起就可以方便重用情况处理的代码,而不用每种情况单独编写代码了。
· 最后一个“break”可以不写,但是为了提高可读性,一般都写上。
将如上代码编译执行,其结果如图4-11所示。
图4-11 Sample4_4的执行结果