VectorLu

Java 中的枚举类

Java 5 之后就有了 enum 关键字——与 class, interface 关键字地位相同,用于定义枚举类。

枚举类是一种特殊的类,它一样可以有自己的成员变量、方法,可以实现一个或者多个接口,也可以定义自己的构造器。一个 Java 源文件最多只能定义一个 public 访问权限的枚举类,且该 Java 源文件也必须和该枚举类的类名相同。

枚举类与普通类的区别

  1. 枚举类可以实现一个或多个接口,使用 enum 定义的枚举类默认继承 java.lang.Enum,而非 Object。因此枚举类不能显示继承其他父类。其中 java.lang.Enum 类实现了 java.lang.Serializablejava.lang.Comparable 两个接口。
  2. 使用 enum 定义、非抽象的枚举类默认会使用 final 修饰,因此枚举类不能派生子类。
  3. 构造器默认且只能使用 private 修饰。
  4. 枚举类的所有实例必须在枚举类的第一行显示列出,否则则个枚举类永远都不能产生实例。列出这些实例时,系统会自动添加 public static final 修饰。无须显示添加。
1
2
3
4
// SeasonEnum.java
public enum SeasonEnum {
SPRING, SUMMER, FALL, WINTER;
}

使用某个枚举类的实例,EnumClass.variable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// EnumTest.java
public class EnumTest {
public void judge(SeasonEnum s) {
// switch 语句里的表达式可以是枚举值
switch (s) {
case SPRING:
System.out.println("春暖🌹开,正好踏青");
break;
case SUMMER:
System.out.println("夏日炎炎,适合游泳");
break;
case FALL:
System.out.println("秋高气爽,进补及时");
break;
case WINTER:
System.out.println("冬日雪飘,围炉赏雪");
break;
}
}
public static void main(String[] args) {
// 枚举类默认有一个 values() 方法,返回该枚举类的所有实例
for (SeasonEnum s : SeasonEnum.values()) {
System.out.println(s);
}
// 使用枚举实例时,可通过 EnumClass.variable 形式来访问
new EnumTest().judge(SeasonEnum.SPRING);
}
}

参考

学习自《疯狂 Java 讲义》第三版

您的支持将鼓励我继续创作!

热评文章