购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

陷阱18

控制无效
——缺少break的switch语句

在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#部门” jUTrAq0zMM9nxVuSsX70RdpEVhijppIsnwX0450nD6Qi7bUpbAZdnrzDG/CRNjpC

点击中间区域
呼出菜单
上一章
目录
下一章
×