定义的enum类型总是继承自java.lang.Enum,且无法被继承;
通过name()获取常量定义的字符串,注意不要使用toString();
通过ordinal()返回常量定义的顺序(无实质意义);
可以为enum编写构造方法、字段和方法
enum的构造方法要声明为private,字段强烈建议声明为final;
enum适合用在switch语句中。
参考下面的例子
public class Meiju{
public static void main(String[] args) {
//枚举类型自带values()方法,用于获取枚举所有的值,枚举常量的值就是下面定义的变量,编号默认从0开始
WeekDay[] values = WeekDay.values();
//遍历枚举
for (WeekDay weekDay : values) {
//输出枚举的序列号,默认从0开始,如果中途定义了一个序号,后面的按照这个序号一次延续.
System.out.println(weekDay.ordinal());//序号
//枚举类型自带name方法,用于获取定义的此枚举值
System.out.println(weekDay.name()); //SUN ..MON ..
//根据构造函数,能够获取下面的值
System.out.println(weekDay.day);//星期几
}
//WeekDay.SUN相当于new了一个SUN对象,取SUN对象day的值
System.out.println(WeekDay.SUN.day);//星期日
//根据枚举类名直接取某个常量括号里面的值,
System.out.println(WeekDay.MON.day);//星期一
//可以用switch进行比较,比较name的值
switch (values[1]) {
case SUN:
System.out.println("星期日");
break;
case MON:
System.out.println("星期一");
break;
default:
break;
}
}
//枚举类定义
public enum WeekDay{
//定义七个枚举常量,我们定义枚举常量的时候是通过定义的构造方法实现的,相当于定义了7个类
SUN("星期日"),MON("星期一"),TUE("星期二"),WED("星期三"),THU("星期三"),FRI("星期五"),SAT("星期六");
String day;
//WeekDay的构造函数
private WeekDay(String day) {
this.day = day;
}
}
}
上述定义的枚举类WeekDay,java编译后内部执行的代码是类似下面的,是不是顿时茅塞顿开.
public final class WeekDay extend Enum{
public static final WeekDay SUN = New WeekDay("星期日");
public static final WeekDay MON = New WeekDay("星期一");
public static final WeekDay TUE = New WeekDay("星期二");
.....
private String day;
private WeekDay(String day){
this.day = day;
}
}