枚举类型
枚举类型就是预先定义的一类常量集合,如一周的时间、水果的类型等。需要注意的几点内容如下:
- 定义枚举类时,Java默认继承java.lang.Enum,所以定义的枚举类不能继承其他类型;
- 枚举类中可以包含成员变量、成员函数,但枚举常量的定义再所有field和method之前,并以“;”结束;
- 枚举类的构造函数必须是package-private或private;
- 枚举常量创建的时候都是将值传递到构造函数进行构建的;
- 由于枚举类继承Enum类,默认具有name()(获得枚举常量名)、values()(获得枚举常量数组)、valueOf(String arg)(将arg转为枚举常量)、ordinal()(声明顺序,由0开始)、getClass()、getDeclaringClass()
实例:
package enumtest; public enum Color {
GREEN(2,"绿色"),
RED(3, "红色"),
BLUE(5, "蓝色"); private int num;
private String desc; Color(int num, String desc) {
this.num = num;
this.desc = desc;
} public int getNum() {
return this.num;
} public String getDesc() {
return this.desc;
} public static void main(String[] args) {
for (Color color : Color.values()) {
System.out.println(color+"---"+color.num+"---"+color.desc);
}
for (Color color : Color.values()) {
System.out.println(color.name());
}
System.out.println(Color.valueOf("GREEN").desc);
System.out.println(Color.GREEN.ordinal());
System.out.println(Color.GREEN.getClass());
System.out.println(Color.GREEN.getDeclaringClass());
}
}
输出结果:
GREEN---2---绿色
RED---3---红色
BLUE---5---蓝色
GREEN
RED
BLUE
绿色
0
class enumtest.Color
class enumtest.Color
另外,在集合中还存在java.util.EnumSet<E extends Enum<E>>和java.util.EnumMap<K extends Enum<K>,V>,其中EnumSet可存储不重复的枚举常量,EnumMap的KEY为某枚举类型,它们的存储类型由泛型声明决定。
参考:
https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html