枚举
什么是枚举
枚举指的是在一定范围内取值,这个值必须是枚举类型中的任意一个,而且只能取一个
枚举的特点
- 枚举本质是一个
Java
类,可以有成员变量,成员方法,构造方法,静态方法,抽象方法,但是没有意义 - 枚举的所有成员出现在枚举常量的后面
- 如果一个枚举没有成员,那么枚举常量最后面的分号可以省略不写,如果有一个成员,那么分号必须写上
public class EnumDemo02 {
public static void main(String[] args) {
TrafficLight tl = TrafficLight.RED;
switch (tl) {
case RED:
TrafficLight.RED.desc();
break;
case GREEN:
TrafficLight.GREEN.desc();
break;
case YELLOW:
TrafficLight.YELLOW.desc();
break;
default:
break;
}
}
}
enum TrafficLight {
// private int age;
RED {
@Override
public void desc() {
System.out.println("红色");
}
}, GREEN {
@Override
public void desc() {
System.out.println("绿色");
}
}, YELLOW {
@Override
public void desc() {
System.out.println("黄色");
}
};
private String name;
private TrafficLight() {}
private TrafficLight(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void staticMethod() {
System.out.println("TrafficLight.staticMethod()");
}
public abstract void desc();
}
枚举的常用方法
public class EnumDemo03 {
public static void main(String[] args) {
int cmp = Weekend.MONDAY.compareTo(Weekend.FRIDAY);
System.out.println(cmp);
System.out.println("===============");
// method1();
// method2();
method3();
}
// 已知枚举对象求枚举名称,求枚举下标
public static void method1() {
Weekend w = Weekend.WEDNESDAY;
System.out.println(w.name());
System.out.println(w.ordinal());
}
// 已知枚举名称求枚举对象,求枚举下标
public static void method2() {
String name = "SATUARDAY";
Weekend w = Weekend.valueOf(name);
System.out.println(w);
System.out.println(w.ordinal());
}
// 已知枚举的下标,获取枚举的对象和名称
public static void method3() {
int index = 3;
Weekend w = Weekend.values()[index];
System.out.println(w);
System.out.println(w.name());
}
}
enum Weekend {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUARDAY, SUNDAY
}