一、执行流程
所有case都和表达式的值不匹配,就会执行default语句体部分
从被匹配的位置开始执行,如果遇到break,那么退出选择结构
二、注意事项
1、case后面的【常量值】不能重复,不然编译器会报错
2、switch后面的小括号只能存放特定类型的数据
- 基本数据类型:byte/short/char/int
- 引用数据类型:Byte,、Short、Character、Integer、String字符串(1.7)、enum枚举1.5)
3、强烈建议,每个case和default语句体中写上break;语句
int number = 8;
switch (number) {
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: // default部分可选,检验不合理数据,增强程序健壮性
System.out.println("数据不合理");
break; // default语句体放在最后,该break可以省略,推荐不省略
}
三、练习理解
String str = "Java";
switch (str) {
case "C#":
System.out.println("C#");
default: // default语句体
System.out.println("C++");
case "Python":
System.out.println("Python");
}
四、与枚举类
switch在有限的可能值中选择,与枚举类是绝佳的组合
public class Demo {
public static void main(String[] args) {
Fruits fruits = Fruits.getFruitsByCode(1);
switch (fruits) {
case APPLIE:
System.out.println("苹果");
break;
case ORANGE:
System.out.println("橙子");
break;
default:
System.out.println("数据异常");
break;
}
}
enum Fruits {
APPLIE("苹果", 1),
ORANGE("橙子", 2); // 枚举对象必须放在枚举类的最前面
String name;
Integer code;
Fruits(String name, Integer code) {
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public Integer getCode() {
return code;
}
/**
* 根据code值获取枚举对象,静态方法
* 当枚举类与switch结合使用时,此方法是必须的
*
* @param code
* @return
*/
public static Fruits getFruitsByCode(Integer code) {
//values()方法获取枚举对象数组
for (Fruits fruits : Fruits.values()) {
if (code == fruits.code) {
return fruits;
}
}
return null;
}
}
}