1.什么是枚举

Java 5新增了一个enum关键字(它与classinterface关键字的地位相同),用以定义枚举类。枚举类是一种特殊的类,它一样可以有自己的Field、方法,可以实现一个或者多个接口,也可以定义自己的构造器。

一个Java源文件中最多只能定义一个public访问权限的枚举类,且该Java源文件也必须和该枚举类的类名相同。

2.枚举类和普通类的区别

枚举类终究不是普通类,它与普通类有如下简单区别:

  • 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。其中java.lang.Enum类实现了java.lang.Serializablejava.lang. Comparable两个接口。
  • 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
  • 枚举类的构造器只能使用private访问控制符,如果省略了构造器的访问控制符,则默认使用private修饰;如果强制指定访问控制符,则只能指定private修饰符。
  • 枚举类的所有实例必须在枚举类的第一行显式列出,否则这个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无须程序员显式添加。

3.使用枚举

在java语言中,使用关键字enum定义一个枚举类型,从构造器区分:枚举可以分为无参构造器的枚举有参构造器的枚举

注意事项

  • 所有的枚举都隐含地继承自 java.lang.Enum,因为Java不支持多重继承,所以枚举类型不能再继承其他类
  • 枚举类型的构造器必须为包级私有或私有的
  • 枚举之间是逗号,与其他语法的间隔是分号。

3.1 无参构造器的枚举

声明

public enum 类名 {
...
}

实例

public enum EnumStudy {
A, B, C, D;
// ....
}

3.2 有参构造器的枚举

声明

public enum 类名 {
...
}

实例

public enum EnumStudy {
A("优秀","90分以上"),
B("优良","80~90分"),
C("良","70~80分"),
D("及格","60 ~70分"),
E("不及格","60分以下");
//自定义成员变量
public String value;
//自定义成员变量
public String desc;
EnumStudy(String value, String desc){
this.value = value;
this.desc = desc;
}
}

4.枚举遍历

4.1 无参构造器遍历

// 无参构造器枚举遍历
for (EnumStudy item:EnumStudy.values()){
System.out.println(item);
}

/**输出:
A
B
C
D
*/

4..2 有参构造器遍历

// 有参构造器枚举遍历
for (EnumStudy item:EnumStudy.values()){
System.out.println("获得:"+item.value + ", 分值:"+item.desc);
}
/**输出:
获得:优秀, 分值:90分以上
获得:优良, 分值:80~90分
获得:良, 分值:70~80分
获得:及格, 分值:60 ~70分
获得:不及格, 分值:60分以下
*/