面试题答案
一键面试基本语法
在Java中,将枚举类型与switch
语句结合使用时,switch
的表达式值为枚举类型,case
后面直接跟枚举常量,无需使用枚举类名限定。语法示例如下:
enum Weekday {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
public class EnumSwitchExample {
public static void main(String[] args) {
Weekday day = Weekday.MONDAY;
switch (day) {
case MONDAY:
System.out.println("Today is Monday, start of the workweek.");
break;
case TUESDAY:
System.out.println("Today is Tuesday, still in the workweek.");
break;
case WEDNESDAY:
System.out.println("Today is Wednesday, mid - week.");
break;
case THURSDAY:
System.out.println("Today is Thursday, almost the weekend.");
break;
case FRIDAY:
System.out.println("Today is Friday, end of the workweek.");
break;
case SATURDAY:
System.out.println("Today is Saturday, weekend time.");
break;
case SUNDAY:
System.out.println("Today is Sunday, enjoy the rest.");
break;
default:
System.out.println("Invalid day.");
}
}
}
根据不同枚举值执行不同业务逻辑
如上述示例,根据day
的不同枚举值,打印不同的描述信息,这就是执行不同的业务逻辑。在实际应用中,case
分支内可以执行各种复杂的业务代码,比如调用不同的服务方法、进行不同的数据处理等。
常见问题
- 枚举常量匹配:
case
后的枚举常量必须是枚举类型中定义的,否则会编译错误。例如,若在上述代码中case
写成case MONDAYYY
,就会编译不通过。 - 遗漏
break
:和普通switch
语句一样,如果在case
分支中遗漏break
语句,程序会继续执行下一个case
分支的代码,可能导致不符合预期的结果。例如,若MONDAY
分支没有break
,当day
为MONDAY
时,不仅会执行MONDAY
分支的代码,还会执行TUESDAY
分支的代码。 default
分支:虽然switch
语句与枚举类型结合时,default
分支不是必需的,但建议加上,以处理可能出现的未预期情况,增强程序的健壮性。例如,如果枚举类型后续扩展了新的常量,有default
分支可以避免程序在新常量出现时出现未处理情况。