Java Enum

一、枚举的以及使用

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

1
2
3
4
5
6
7
8
9
10
11
12
13
// 定义
enum Day{
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

// 使用
Day day= Day.MONDAY;// 此时day就是MONDAY这个常量,可以用if等去判断,也可以直接输出
//也可以通过类调用
Day day= Day.MONDAY;
System.out.println(Day.MONDAY);
if(day==Day.MONDAY){
System.out.println("yes");
}

枚举类中加入其他常量与方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//定义
public enum Day {
MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4),
FRIDAY(5), SATURDAY(6), SUNDAY(7);

Integer integer;

Day(Integer integer) {
this.integer = integer;
}
}
//使用
Day day = Day.MONDAY;
System.out.println(day.integer);
System.out.println(Day.MONDAY.integer);

常用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
// values()方法,获取枚举的所有值
Day [] days = Day.values();
System.out.println(Arrays.toString(days));
// [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY]

// ordinal()获取索引值,类似于数组
Day day = Day.MONDAY;
System.out.println(day.ordinal());
// 0

// valueOf()返回对应的字符串的枚举类型的值
Day day = Day.valueOf("MONDAY");

二、深入理解枚举

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

//反编译Day.class
final class Day extends Enum //实际上继承了Enum枚举类,同时是final,不可被继承
{
//编译器为我们添加的静态的values()方法
public static Day[] values()
{
return (Day[])$VALUES.clone();
}
//编译器为我们添加的静态的valueOf()方法,注意间接调用了Enum也类的valueOf方法
public static Day valueOf(String s)
{
return (Day)Enum.valueOf(Day, s);
}
//私有构造函数
private Day(String s, int i /*,Integer integer*/)
{
super(s, i);
// 如果有其他参数,此处也会同时构造
// this.integer = integer
}
//前面定义的7种枚举实例
public static final Day MONDAY;
public static final Day TUESDAY;
public static final Day WEDNESDAY;
public static final Day THURSDAY;
public static final Day FRIDAY;
public static final Day SATURDAY;
public static final Day SUNDAY;
private static final Day $VALUES[];

static
{
//实例化枚举实例
MONDAY = new Day("MONDAY", 0);
TUESDAY = new Day("TUESDAY", 1);
WEDNESDAY = new Day("WEDNESDAY", 2);
THURSDAY = new Day("THURSDAY", 3);
FRIDAY = new Day("FRIDAY", 4);
SATURDAY = new Day("SATURDAY", 5);
SUNDAY = new Day("SUNDAY", 6);
$VALUES = (new Day[] {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
});
}
}