Java开发手册
上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的执行结果