在Java中除了支持if条件判断语句,还支持开关语句。开关语句的基本语法结构如下,
switch (表达式) {
case 案例值1:
...
break;
case 案例值2:
...
break;
default:
...
break;
}
程序在运行时如果遇见开关语句,它会先计算表达式的值,然后执行与结果相匹配的case代码块。如果所有案例值与表达式结果都不匹配,则自动执行default代码块。
接下来我们仍然一起通过丰富的代码示例来理解Java中的开关语句。
int day = 1;
switch (day) {
case 1:
System.out.println("今天是星期一");
break;
case 2:
System.out.println("今天是星期二");
break;
case 3:
System.out.println("今天是星期三");
break;
case 4:
System.out.println("今天是星期四");
break;
case 5:
System.out.println("今天是星期五");
break;
case 6:
System.out.println("今天是星期六");
break;
case 7:
System.out.println("今天是星期天");
break;
default:
System.out.println("请检查表达式的合法范围[1~7]");
break;
}
上面的代码中我们首先声明了一个int型变量,用来表示从星期一到星期天的某一天(1~7)。接着是开关语句的代码部分,为了表达起来更简明,有时候教程里面也会说“switch语句”。这里使用变量day来直接作为表达式。然后在花括号里面里面是所有case代码块和一个default代码块。
如果当前变量day的值为1,那么第一个case代码块会被执行;如果值为2,则第二个case代码块会被执行,如果为3则第三个case代码块会被执行。如果变量day的取值不是1到7之间,那么default代码块会被执行。
大家如果运行上面这段代码,屏幕上应该会打印
今天是星期一
可以自己试一试更改变量day的值,然后再次运行这段代码。比如要是day的值为6,则第六个case代码块会被执行,我们的电脑上会打印出
今天是星期六
可能你发现了,好像在每一个case代码块里面以及在default代码块里面,都有这样一条“break;”代码。它的作用是告诉程序在执行完第一个匹配的case代码块后,或者执行完default代码块后,终止继续执行代码并跳出switch语句。
如果在第一个匹配的case代码块里面没有这行break语句,那么程序不会跳出switch语句,而是继续执行后面的case代码块,直到遇见一行break语句。
利用break语句的这个机制,很多时候可以极大地方便我们编写类似于下面这样的代码,
switch (day) {
case 1:
case 2:
case 3:
System.out.println("周一到周三在校上课");
break;
case 4:
case 5:
System.out.println("周四周五在实验室");
break;
case 6:
case 7:
System.out.println("周末两天休息");
break;
default:
System.out.println("一周只有七天,都安排满了");
break;
}
在这个示例中,前三个case代码块只有第三个有具体的代码语句,其他两个只有案例判断条件“case 1”、“case 2”。由于缺少break语句,当变量day的值为1时,尽管第一个case代码块最匹配,程序在运行时也会继续检查并执行第二个case代码块;当发现第二个case代码块里面也缺少break语句,程序继续检查并执行第三个case代码块,直到遇见break语句退出。
因此当变量day的值为1、2或者3时,这个程序都会在屏幕上打印
周一到周三在校上课
这段程序非常有趣味,大家自己试一试给变量day赋予不同的值,然后再运行一下程序。比如当day的值为8时,屏幕上会打印
一周只有七天,都安排满了
需要特别说明的是,并不是所有在Java范畴内的表达式都可以用在switch开关语句的表达式里面。比如结果是布尔类型或者浮点数类型的表达式就不被switch语句所支持,当然也包括布尔类型和浮点数类型变量。
对于我们目前为止学习过的数据类型,除了布尔类型、浮点数类型不能用于开关语句。其他如字节类型(byte)、短整型(short)、常规整型(int)的表达式和变量可以用于开关语句的表达式部分,但是长整型(long)却不受开关语句所支持,这里大家需要特别注意一下。
另外字符类型(char)也可以用于开关语句,以及后面马上我们会深入学习的字符串类型也可以用于开关语句的表达式部分。
下面是本节教程的完整代码,
public class SwitchDemo {
public static void main(String[] args) {
int day = 6;
switch (day) {
case 1:
System.out.println("今天是星期一");
break;
case 2:
System.out.println("今天是星期二");
break;
case 3:
System.out.println("今天是星期三");
break;
case 4:
System.out.println("今天是星期四");
break;
case 5:
System.out.println("今天是星期五");
break;
case 6:
System.out.println("今天是星期六");
break;
case 7:
System.out.println("今天是星期天");
break;
default:
System.out.println("请检查表达式的合法范围[1~7]");
break;
}
day = 8;
switch (day) {
case 1:
case 2:
case 3:
System.out.println("周一到周三在校上课");
break;
case 4:
case 5:
System.out.println("周四周五在实验室");
break;
case 6:
case 7:
System.out.println("周末两天休息");
break;
default:
System.out.println("一周只有七天,都安排满了");
break;
}
}
}