IT兄弟连 Java语法教程 流程控制语句 分支结构语句5

  • 2019 年 10 月 5 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ITXDL123/article/details/95938136

5 switch-case条件语句

Java中的第二种分支控制语句时switch语句,switch语句提供了多路支持,因此可以使程序在多个选项中进行选择。尽管一系列嵌套if语句可以执行多路测试,然而多数情况下使用switch则更为高效。其完整形式如下:

switch(expression){

case constant1:

statement sequence;

break;

case constan2:

statement sequence;

break;

default:

statement sequence;

}

对于JDK7之前的Java版本,switch表达式必须是byte、short、int、char类型或枚举。从JDK7开始,表达式也可以是String类型,这意味着当前版本的Java可以使用字符串控制switch。通常,控制switch的表达式只是变量,而不是较大的表达式。

case语句中指定的每个值必须是唯一的常量表达式(例如字面值),重复的case值是不允许的。每个值得类型必须与switch表达式的类型兼容。

如果没有与表达式的值相匹配的case常量,就执行default语句,default语句是可选的,如果没有该语句,那么当所有的匹配都不成功时,就不会发生任何动作。当找到一个匹配时,就执行与该匹配相关的语句,直到遇到break为止。对于default或最后一个case,则执行到switch语句的末尾。

例:下面的程序演示了switch语句:

public class SwitchDemo{

public static void main(String[] args){

char score = 'C';

switch (score) {

case 'A':

System.out.println("优秀");

break;

case 'B':

System.out.println("良好");

break;

case 'C':

System.out.println("中等");

break;

case 'D':

System.out.println("及格");

break;

default:

System.out.println("不及格");

}

}

}

编译并运行这个程序,在控制台将显示如图8所示的信息。

图8 SwitchDemo运行结果

通过运行结果可以看到,程序在控制台输出了“中”,这是完全正确的,字符表达式score的值为“C”,对应的结果为“中等”。

在case标签后的每个代码块后都有一条break语句,这是Java中的关键字,break语句有着极其重要的意义,Java的switch语句允许case后代码块中没有break语句,但是这种做法可能会引入一个陷阱。如果把上面程序中的break语句都注释掉,将看到以下结果:

public class SwitchDemo{

public static void main(String[] args){

char score = 'C';

switch (score) {

case 'A':

System.out.println("优秀");

case 'B':

System.out.println("良好");

case 'C':

System.out.println("中等");

case 'D':

System.out.println("及格");

default:

System.out.println("不及格");

}

}

}

重新编译并运行这个程序,控制台向显示如图9所示的信息。

图9 去掉break后SwitchDemo运行结果

这个运行结果看起来很奇怪,但这正是有switch语句运行流程决定的:switch语句会先求出expression表达式的值,然后拿这个表达式和case标签后的值进行比较,一旦遇到相等的值,程序就开始执行这个case标签后的代码,不再判断与后面case、default标签的条件是否匹配,除非遇到break才会结束。

JDK7增强了switch语句的功能,允许switch语句的控制表达式是java.lang.String类型的变量或表达式,但是只能是java.lang.String类型,不能是StringBuffer或者StringBuilder这两种字符串类型。