switch…case结构中,每个case分支中必须使用break语句,除非确实存在多个case的处理流程完全相同,则在最后一个case处理完成后,使用break跳出;
说明:如果case中有处理语句,则必须使用break跳出。如果不使用break跳出,则程序将会继续向下判断其余的case分支,还会走入default分支,结果导致程序出错。
正例
例2:
void SomeMethod(int type){
switch(type){
case TYPE_A:
do thingA;
break;
case TYPE_B:
do thingB;
break;
default: //default并不是必须的,也可以不写
do something;
break;
}
}
public static void main(String[] args) {
checkStatusSwitchValid("DRAFT", "ONLINE_AUDIT_PENDING");
}
// 检查转态切换是否合理
private static void checkStatusSwitchValid(String currentStatus, String newStatus) {
switch (currentStatus) {
case "DRAFT": // 这里不写break; 是因为"DRAFT" 和 "OFFLINE", 2个case的处理流程完全相同
case "OFFLINE":
if (newStatus.equals("ONLINE_AUDIT_PENDING")) {
return;
}
break;
case "ONLINE_AUDIT_PENDING":
if (newStatus.equals("DRAFT") || newStatus.equals("ONLINE")) {
return;
}
break;
case "ONLINE":
if (newStatus.equals("OFFLINE")) {
return;
}
break;
default:
break;
}
log.error("switch currentStatus {} to newStatus {} is invalid", currentStatus, newStatus);
}