在Java中switch语句也是一个经常使用的分支结构,但是在使用switch语句时,一定要注意以下两点:第一点是switch语句只能接收整型值、字符值或枚举型值;第二点是在使用switch语句时,要在每个case语句块结束后,使用break语句结束整个switch语句的执行。
提 示
在使用switch语句时,如果在case语句块结束后,没有使用break语句结束整个switch语句的执行,程序会从匹配的case语句开始一直执行下去,直到遇到break语句或执行完整个switch语句才能结束,这样会导致不符合条件的语句也会被执行。
接下来通过一个示例来说明为什么在使用switch语句时,在每个case语句块执行完以后,一定要用break语句结束整个switch语句的执行。
没添加break语句,导致程序结果错误,示例:
假设Java部门、C#部门、PHP部门和VB部门的部门编号分别为 1、2、3 和 4,要求根据部门编号输出对应的部门名称。
运行本示例,将在控制台输出如图3.15 所示的信息,其中,“PHP部门”和“VB部门”是不符合部门编号是2的部门,只有“C#部门”才是真正符合要求的。
图3.15 在控制台输出的部门名称
说 明
本示例之所以将“PHP部门”和“VB部门”也输出到控制台,是因为在使用switch语句时,在每个case语句块后没有添加break语句,所以程序在执行完标记 处的case语句块后,并没有结束switch语句的执行,而是继续往下执行,直到标记 和标记 处的case语句块执行完,才最终结束switch语句的执行,所以输出了如图3.15 所示的3个部门,这样就会把用户弄糊涂,不知道哪个部门名称才是真正符合要求的。
添加break语句,程序输出正确的结果,示例:
对上一个示例进行更改,在case语句块中添加break语句,使程序能够输出正确的部门名称。
运行本示例,在控制台只输出了符合部门编号是2的“C#部门”,而没有输出其他部门,如图3.16 所示。
说 明
本示例之所以只输出了“C#部门”,是由于在每个case语句块中都添加了break语句,因此当程序输出“C#部门”后,继续往下执行,执行到break语句,而switch语句一旦执行break语句,将结束整个switch语句的执行,因而只输出了“C#部门”。所以,在使用switch语句时,一定要在每个case语句块结束处添加break语句,使switch语句只执行满足要求的case语句块,而不至于发生错误。
图3.16 在控制台只输出了“C#部门”