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;
}
// getter
public String getSeasonName() {
return this.seasonName;
}
// getter
public String getSeasonDesc() {
return this.seasonDesc;
}
// 重写toString,不重写的话返回常量名字,比如“SPRING”
public String toString() {
return "Season{" + "seasonName='" + seasonName + '\'' +", seasonDesc='" + seasonDesc + '\''+'}';
}
}
class Test {
public static void main(String[] args) {
System.out.println(Season.SPRING); // 默认调用toString方法
System.out.println(Season.SPRING.getSeasonName());
System.out.println(Season.SPRING.getSeasonDesc());
}
}
说明
-
Season.SPRING.name();
和Season.SPRING; // 默认toString方法
打印的都是常量名字“SPRING” -
Season.values()
方法可以获取所有的枚举对象(数组) -
Season.valueOf("SPRING")
可以获取指定常量名的对象,如果传入的常量找不到对象,则会报错 -
Season.WINTER.ordinal()
可以获取当前对象的索引3 -
枚举也可以实现接口,可以在类中去重写接口的方法,也可以单独在每个枚举对象中重写接口的方法
interface IShow { void show(); } enum Season implements IShow{ SPRING("春天", "春暖花开"){ public void show() { System.out.println("这是SPRING重写的show方法"); } }, SUMMER("夏天", "夏日炎炎"){ public void show() { System.out.println("这是SUMMER重写的show方法"); } }, AUTUMN("秋天", "秋高气爽"){ public void show() { System.out.println("这是AUTUMN重写的show方法"); } }, WINTER("冬天", "白雪皑皑"){ public void show() { System.out.println("这是WINTER重写的show方法"); } }; public void show() { System.out.println("四个枚举对象公用这一个方法"); } }
枚举类简写方式:如果没有额外的描述字段,可以直接简写成下面这样
enum Status {
BUSY, FREE, VOCATION, DIMISSION;
}