switch 语句
与 if-then
和 if-then-else
语句不通, switch
语句可以有一定数量的可能执行路径。 switch
可以对 byte
, short
, char
, 以及 int
p基本数据类型使用. 同样可以对枚举类型使用 (参考 Enum Types), 字符串 String
类使用, 以及基本数据类型的包装类: Character
,Byte
, Short
, 和 Integer
(参考 Numbers and Strings).
以下的代码示例中 SwitchDemo
, 声明了一个名为mongth
的int
。代码使用switch
语句,根据month
的值显示出月份的名字.
|
|
本例中, August
被输出.
switch
语句的代码体也叫做 switch blocks (switch代码块). switch
代码块中的语句可以用一个或者多个case
或者 default
标签分类。switch
语句运算表达式的值,然后执行匹配的case
标签后的所有语句。你同样可以使用if-then-else
语句实现以上代码的功能:
|
|
决定使用if-then-else
语句还是switch
语句取决于可读性以及语句所要测试的表达式。 if-then-else
语句可以用来检验基于值的范围或者条件的表达式,switch
语句可以用来检验基于整数,枚举值,以及字符串String
对象。
另外一个有趣的点时break
语句.每一个break
语句终结闭合的 switch
语句,控制流程继续跟随switch
代码块的下一语句。break
语句时必须的,如果为没有break
语句,switch
代码块 将会fall through跌穿(整段垮掉):所有匹配的case
标签之后的语句都会按照顺序执行,不管随后的case
标签后的表达式是否匹配,直到遇见一个break
语句。下面的程序 SwitchDemoFallThrough
展示了一个争端垮掉的 switch
代码块. 程序显示了整数对应的月份以及一年当中随后的月份:
|
|
代码输出结果如下:
|
|
技术上来说,最后一个break
并不时必须的因为流程执行跌出switch
语句。推荐使用一个break
语句,这样可以使修改代码更加容易并且不容出错。default
部分代码处理么有被任何一个case
标签表明的其他任何值。
以下的示例代码中 SwitchDemo2
, 展示了如何在语句中使用多个case
标签,代码计算指定月份的天数:
|
|
以下为代码的输出:
|
|
在switch语句中使用字符串
Java SE 7以及之后的版本中,你可以在switch
语句的表达式中使用字符串String
对象。以下代码, StringSwitchDemo
,根据字符串month
的String
值显示出对应月份的数字:
|
|
代码的输出结果为 8
.
switch
表达式的String
值 与case
标签中对应的值进行比较,就像使用 String.equals
方法。为了使StringSwitchDemo
可以接受所有忽略大小写的月份,month
被转换为小写形式。(通过 toLowerCase
方法), 并且case
标签中对应的字符串值也全部为小写。
注意: 本例中,检查了month
的值是否为null
,确保任何switch语句中的任何表达式值不为null
,方式抛NullPointerException
空指针异常.