1. 枚举类的定义
- 类的对象只有有限个,确定的(这意味着对象不能从外部构造,私有)
- 需要定义一组常量时,强烈建议使用枚举类
2. 如何自定义枚举类
- jdk5.0之前自定义枚举类
- jdk5.0之后可以使用enum关键字定义枚举类
3.枚举类的使用示例
3.1. 自定义枚举类
public class SeasonTest {
public static void main(String[] args) {
Season winter = Season.WINTER;
System.out.println(winter.getSeasonName());
}
}
class Season {
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public static final Season SPRING = new Season("春天", "春光灿烂");
public static final Season SUMMER = new Season("夏天", "夏日炎炎");
public static final Season AUTUMN = new Season("秋天", "秋高气爽");
public static final Season WINTER = new Season("冬天", "冬天滑冰");
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
3.2. enum关键字定义枚举类(默认继承Enum类)
public class SeasonTest {
public static void main(String[] args) {
Season winter = Season.WINTER;
System.out.println(winter.getSeasonName());
System.out.println(winter.getClass().getSuperclass());
}
}
enum Season {
SPRING("春天", "春光灿烂"),
SUMMER("夏天", "夏日炎炎"),
AUTUMN("秋天", "秋高气爽"),
WINTER ("冬天", "冬天滑冰");
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
3.3. Enum类的常用方法
- values()方法,返回枚举类型对象数组,该方法可以方便的遍历所有的枚举值
- valueOf(String str) 返回str同名的枚举对象
- toString() 返回当前枚举对象常量名称
public static void main(String[] args) {
Season winter = Season.WINTER;
System.out.println(winter.getClass().getSuperclass());
System.out.println("------------------------------");
Season[] values = Season.values();
for (Season value : values) {
System.out.println(value);
}
System.out.println("------------------------------");
Season summer = Season.valueOf("SUMMER");
System.out.println(summer);
}

3.4. 使用enum定义的枚举类实现接口
- 在enum中实现接口中的抽象方法
interface Info {
void show();
}
enum Season implements Info{
SPRING("春天"),
SUMMER("夏天");
private final String seasonName;
private Season(String seasonName) {
this.seasonName = seasonName;
}
public String getSeasonName() {
return seasonName;
}
@Override
public void show() {
System.out.println("show");
}
}
- 在每个枚举对象中实现接口中的抽象方法
interface Info {
void show();
}
enum Season implements Info{
SPRING("春天") {
@Override
public void show() {
}
};
private final String seasonName;
private Season(String seasonName) {
this.seasonName = seasonName;
}
public String getSeasonName() {
return seasonName;
}
}