Enum枚举类
枚举类
当我们在定义有限的成员变量时我们通常是这样定义的
public class Week(){
public static String MONTHDAY = "星期一";
public static String THURSDAY = "星期二";
public static String WENSDAY = "星期三";
.
.
public static String SUNDAY = "星期天";
}
问题:如果我们想知道一个星期有几天,或者如果我们在复制的时候赋值错了
public static String MONTHDAY = "星期一";
public static String THURSDAY = "星期一";
编译器都可以通过,不会出现报错
那么怎么才能更加优雅的解决这个问题呢?java给我们提供了Enum枚举类。枚举类不是普通类,不能被继承,也不能实现接口。
定义基础枚举类
public enum Week {
MONDAY,THURSDAY,WENSDAY,....SUNDAY;
//jvm帮我们创建了7个实例
}
调用
Week day = Week.MONDAY
和调用变量一样
定义复杂的枚举类
我们给上面的枚举类加上他们所对应的中文名称
public enum MyEnum {
MONDAY("星期一"), THURSDAY("星期二")...SUNDAY("星期天");
public String nameString;
MyEnum(String CN) {
nameString = CN;
}
public String getDay() {
return nameString;
}
}
枚举类的常用方法
toString方法和name方法
输出名称
例:
MyEnum myEnum = MyEnum.MONDAY;
System.out.println(myEnum.toString());
System.out.println(myEnum.name());
//输出
//MONDAY
//MONDAY
valueOf(String str)和valueOf(class,String str)
获得实例
例:
MyEnum getEumn = MyEnum.valueOf("THURSDAY"); //getEumn = MyEnum.THURSDAY
values()
返回一个包含全部枚举值的数组
例:
MyEnum[] weeks = MyEnum.values();
for (MyEnum week : weeks) {
System.out.println(week);
}
//输出
//MONDAY
//THURSDAY
//WENSDAY
.
.
.
//SUNDAY
ordinal方法
获得该枚举值所在的位置(从0开始计数)
MyEnum myEnum = MyEnum.MONDAY;
System.out.println(myEnum.ordinal());
//输出
//0
compareTo(E other)
如果常量出现在other的前面,返回负值,如果this==other,返回0,如果在后面,返回正值,返回值为索引之差
例:
MyEnum myEnum = MyEnum.MONDAY;
MyEnum myEnum2 = MyEnum.WENSDAY;
MyEnum myEnum3 = MyEnum.WENSDAY;
System.out.println(myEnum.compareTo(myEnum2)); //-2
System.out.println(myEnum2.compareTo(myEnum)); //2
System.out.println(myEnum3.compareTo(myEnum3)); //0
有了枚举类,可以让我们的代码更加的安全,也更加的方便对有限的变量进行操作