
3.6 多分支语句switch
用if-else-if语句处理多个分支选择的情况显得有些笨拙,为此Java语言提供了一个多分支语句switch,可以使多分支选择编程更加简单明了。
其一般形式为:

执行流程是:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。switch使用的表达式及常量表达式的类型可以是char、byte、short、int或其包装器类型,从Java 7开始还可以是字符串常量,也可以是枚举常量。switch使用枚举常量有一些特殊的规定,后面章节将详细介绍。
显然,从某个匹配的常量表达式开始一直向下执行的流程并不符合大多数多分支选择编程的需求,一般需要像if-else-if语句那样的执行流程。使用Java语言的break语句可以跳出switch语句,即在switch语句中匹配的常量表达式所跟随的语句序列最后加上“break;”语句,就能够直接使执行流程转到switch语句块之后执行。switch语句的常用形式是:

例如,在例3.4设计的四则运算计算器程序的calcOpr方法中使用了if-else-if语句结构针对用户选择的+、-、*、/ 4种情况进行判断,当光标悬停到NetBeans IDE的第一个if语句的行号处时,出现即时帮助框,建议用switch替换if链(见图3.12)。单击该行号处的图标,单击
指令,程序的结构会替换为switch语句(见图3.13)。
从图3.12和图3.13可以看出,switch语句比相同程序逻辑的if-else-if链更清晰易懂,程序代码也更加简洁。
在使用switch语句时还应注意以下几点。
(1)在case后的各常量表达式的值不能相同,否则会出现错误。
(2)在case后,允许有多个语句,可以不用{}括起来。
(3)default子句可以省略不用。

图3.12 NetBeans IDE的即时帮助框及if-else-if链

图3.13 if链的对应switch语句