枚举类入门
枚举类是一种特殊的类,它一样可以有自己的方法和属性,可以实现一个或者多个接口,也可以定义自己的构造器。
枚举类与普通类的区别:
使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类;
枚举类的构造器只能使用private访问控制符,如果省略了其构造器的访问控制符,则默认使用用private修饰;
枚举类的所有实例必须在枚举中显式列出,否则这个枚举类将永远都不能产生实例。
java.lang.Enum类中提供了如下几个方法:
int compareTo(E o):该方法用于与指定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;反之,则返回零。
String name():返回此枚举实例的名称,这个名称就是定义枚举类时列出的所有枚举值之一。应该优先考虑使用toString()方法,因为toString()方法返回更加用户友好的名称。
int ordinal():返回枚举值在枚举类中的索引值(就是枚举值在枚举声明中的位置,第一枚举值的索引值为零)。
String toString():返回枚举常量的名称。
public static <T extends Enum<T>> T valueOf(Class<T> enumType,String name):用于返回指定枚举类中指定名称的枚举值。名称必须与在该枚举类中声明枚举时所用的标识符完全匹配,不允许使用额外的空白字符。
枚举类的使用
1、枚举类型的简单定义方法如下:
public enum Season {
SPRING,SUMMER,FALL,WINTER;
}
这样定义只能够表示出春、夏、秋、冬,但是具体的值没有表示出来。不过枚举类型提供了构造函数,可以通过构造函数和覆写toString方法来实现。改造后的代码:
public enum Season {
SPRING(1),SUMMER(2),FALL(3),WINTER(4);
// 定义私有变量
private int value;
private Season(int value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
}
2、包含方法的枚举类
public enum Season {
SPRING(1), SUMMER(2), FALL(3), WINTER(4);
// 定义私有变量
private int value;
private Season(int value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
public Season next() {
Season season = null;
switch (this) { // 代表枚举的一个值
case SPRING:
season = SUMMER;
break;
case SUMMER:
season = FALL;
break;
case FALL:
season = WINTER;
break;
case WINTER:
season = SPRING;
break;
}
return season;
}
}
3、包含抽象方法的枚举类
public enum Season {
SPRING(1) {
public Season next() {
return SUMMER;
}
},
SUMMER(2) {
public Season next() {
return FALL;
}
},
FALL(3) {
public Season next() {
return WINTER;
}
},
WINTER(4) {
public Season next() {
return SPRING;
}
};
// 定义私有变量
private int value;
private Season(int value) {
this.value = value;
}
@Override
public String toString() {
return String.valueOf(value);
}
// 为枚举类定义一个抽象方法,这个抽象方法由不同枚举值提供不同的事项
public abstract Season next();
}