什么是枚举 what
枚举类enum是jdk1.5引入的,全称enumeration,和class、interface的地位一样,存在java.lang包中
什么时候使用枚举 when
当变量的值在一个固定的范围内变化时,建议优先使用枚举
为什么使用枚举 why
正常我们声明常量时
public static final String SEASON_SPRING = "春天";
public static final String SEASON_SUMMER = "夏天";
public static final String SEASON_AUTUMN = "秋天";
public static final String SEASON_WINTER = "冬天";
使用枚举时
public enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
使用枚举更加直观,更加安全,枚举类为每个实例自动添加了public static final修饰符。
如何使用枚举how
最简单的枚举就像上面代码那样,在需要使用的地方就可以直接引用了,你没听错,直接Season.SPRING就能拿到这个实例,不用new。
其次,我们还可以为每个实例增加属性值,注意实例名称必须写在第一行
public enum Season{
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天");
private final String name;
Season(String name){
this.name = name;
}
public String getName() {
return name;
}
}
再者,我们还可以在枚举类中声明接口,每个实例都需要重写该接口
public enum Season{
SPRING("春天") {
@Override
public String hello(String str) {
return "春天" + str;
}
},
SUMMER("夏天") {
@Override
public String hello(String str) {
return "夏天" + str;
}
},
AUTUMN("秋天") {
@Override
public String hello(String str) {
return "秋天" + str;
}
},
WINTER("冬天") {
@Override
public String hello(String str) {
return "冬天" + str;
}
};
abstract String hello(String str);
private final String name;
Season(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
此时,Season作为一个接口,每个实例则是Season的匿名内部类
当然,枚举类也可以在switch中使用。