java中的switch仅支持case条件仅支持int、enum两种类型。
用enum的时候,不能直接写下列形式。
switch (timeType) {
case ProdtransTimeTypeEnum.DAILY:
break;
default:
break;
}
而是先import进来此枚举类,case中直接写枚举值
switch (timeType) {
case DAILY:
break;
default:
break;
}
使用误区1
今天在做一个需求时,碰到一个类似如下switch语句。
for (int i = 0; i < 5; i++) {
System.out.println("-----------------" + i);
switch (i) {
case 1:
System.out.println(1);
continue;
case 2:
System.out.println(2);
return;
case 3:
System.out.println(3);
break;
default:
System.out.println("default");
break;
}
}
我要做的是,对是否continue循环加一个条件判断,我是这样改的:
for (int i = 0; i < 5; i++) {
System.out.println("-----------------" + i);
switch (i) {
case 1:
System.out.println(1);
if (条件) {
break;
} else {
continue;
}
case 2:
System.out.println(2);
return;
case 3:
System.out.println(3);
break;
default:
System.out.println("default");
break;
}
}
测试发现这样改不对,循环在满足条件的情况下没有跳出,继续循环了。。。问题原因就是:break只是跳出了switch,并没有跳出for循环。
为什么会犯这个错误?
1. 对switch理解不深。
2. switch里的continue, return误导了我。
continue和break经常配对出现在循环中,continue是退出本次循环,break是跳出整个循环,return是跳出整个方法。而这个例子里break只是跳出了switch。。。
switch的标准写法是这样的:
switch(integral-selector) {
case integral-value1: statement;break;
case integral-value2: statement;break;
case integral-value3: statement;break;
case integral-value4: statement;break;
case integral-value5: statement;break;
default: statement;
}
如果省略break,程序会继续执行其他case直到遇到下一个break。
我个人建议在用switch的时候尽量选择这样的标准写法,不要加入continue、return等,代码可读性差而且容易犯错。。。特别是在本来逻辑就复杂的情况下,很难关注到switch里的这个细节了。