枚举类型是一个特殊的类,一般用来表示一组常量,例如一年的四季。枚举类使用关键字 enum
来定义。各个常量通过逗号分隔,最后一个常量后面可以加逗号,也可以不加。
Java 枚举类型的基本用法如下:
enum Season {
SPRING, SUMMER, AUTUMN, WINTER;
}
上面代码定义了一个枚举类型 Season
,它有 4 个常量 SPRING
、SUMMER
、AUTUMN
、WINTER
。枚举类型的常量是静态的,可以通过枚举类型直接访问。
System.out.println(Season.SPRING); // SPRING
System.out.println(Season.SUMMER); // SUMMER
比较枚举类型
使用 enum
定义的枚举类型是一种引用类型,而对于引用类型的比较,要使用equals()
方法,不能使用==
。==
比较的是两个引用类型的引用是否是同一个对象。因此,引用类型的比较要使用equals()
方法。但是,对于枚举类型,我们可以直接使用==
来比较两个枚举类型的值是否相等。
Season s1 = Season.SPRING;
Season s2 = Season.SPRING;
System.out.println(s1 == s2); // true
方法
name() 方法
name()
方法返回枚举常量的名称,返回值是一个字符串。
System.out.println(Season.SPRING.name()); // SPRING
values() 方法
values()
方法返回一个包含所有枚举常量的数组。
Season[] values = Season.values();
for (Season value : values) {
System.out.println(value);
}
valueOf() 方法
valueOf()
方法返回指定名称的枚举常量。
Season season = Season.valueOf("SPRING");
System.out.println(season); // SPRING
ordinal() 方法
ordinal()
方法返回枚举常量的序号,从 0 开始。
System.out.println(Season.SPRING.ordinal()); // 0
System.out.println(Season.SUMMER.ordinal()); // 1
System.out.println(Season.AUTUMN.ordinal()); // 2
System.out.println(Season.WINTER.ordinal()); // 3
compareTo() 方法
compareTo()
方法用于比较两个枚举常量的顺序。
System.out.println(Season.SPRING.compareTo(Season.SUMMER)); // -1
System.out.println(Season.SUMMER.compareTo(Season.SPRING)); // 1
System.out.println(Season.SUMMER.compareTo(Season.SUMMER)); // 0
枚举内部成员
枚举跟普通类一样,可以拥有自己的变量,方法和构造方法。但是,构造方法只能是 private
访问权限。字段建议声明为 final
类型。
enum Season {
SPRING("春天", "spring"),
SUMMER("夏天", "summer"),
AUTUMN("秋天", "autumn"),
WINTER("冬天", "winter");
private final String english;
private final String chinese;
private Season(String chinese, String english) {
this.chinese = chinese;
this.english = english;
}
public String getChinese() {
return chinese;
}
public String getEnglish() {
return english;
}
}