Java核心技术卷I基础知识(原书第9版)
上QQ阅读APP看书,第一时间看更新

3.8.5 多重选择:switch语句

在处理多个选项时,使用if/else结构显得有些笨拙。Java有一个与C/C++完全一样的switch语句。

例如,如果建立一个如图3-13所示的包含4个选项的菜单系统,就应该使用下列代码:

图3-13 switch语句的流程图

switch语句将从与选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。

警告:有可能触发多个case分支。如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句。这种情况相当危险,常常会引发错误。为此,我们在程序中从不使用switch语句。

如果你比我们喜欢switch语句,编译代码时可以考虑加上-Xlint:fallthrough选项,如下所示:

这样一来,如果某个分支最后缺少一个break语句,编译器就会给出一个警告消息。

如果你确实正是想使用这种“直通式”(fallthrough)行为,可以为其外围方法加一个标注@SuppressWarnings("fallthrough")。这样就不会对这个方法生成警告了。(标注是为编译器或处理Java源文件或类文件的工具提供信息的一种机制。我们将在卷II的第13章详细讨论标注。)

case标签可以是:

●类型为char、byte、short或int(或其包装器类Character、Byte、Short和Intege,这些包装器类将在第4章介绍)的常量表达式。

●枚举常量。

●从Java SE 7开始,case标签还可以是字符串字面量。

例如:

当在switch语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由switch的表达式值确定。例如: