通过使用新的enum
关键字创建指定的对象集合,您可以创建一个枚举类型。然后,可以将每个指定的值看作是那个类的一个实例。
枚举(Enum):我们所定义的每个枚举类型都继承自java.lang.Enum 类,枚举中的每个成员默认都是public static final的。
而每个枚举的成员其实就是您定义的枚举类型的一個实例(Instance)。换句话说,当定义了一个枚举类型后,在编译时刻就能确定该枚举类型有几个实例,分别是什
么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了。
1 enum Operation
2 {
3 ADD, SUB, MUL, DIV
4 }
以上有四个实例,借用张孝祥老师上课可讲的方法,写一个与上面等价的类实现:
1 public class Operation
2 {
3 private Operation()
4 {
5 }
6 public static final Operation ADD = new Operation();
7 public static final Operation DIV = new Operation();
8 public static final Operation SUB = new Operation();
9 public static final Operation MUL = new Operation();
10 }
带有构造方法的enum,注意实例必须写在构造方法前面,构造方法必须是私有的private,并且最后一个实例和构造方法用分号隔开;枚举加载是会初始化枚举对象(对象都是public static final的)和调用静态方法,举个例子:
1 enum Operation
2 {
3 ADD, SUB(3), MUL, DIV(5);
4 private Operation()
5 {
6 System.out.println("不带参说的");
7 }
8 private Operation(int a)
9 {
10 System.out.println("带参数的");
11 }
12 }
说说调用过程吧,当Operation.ADD调用的是不带参说的构造方法,Operation.SUB调用的是带参数的构造方法;
带有抽象方法的枚举:
1 enum TrafficLamp
2 {
3 RED
4 {
5 @Override
6 public TrafficLamp nextLamp()
7 {
8 return GREEN;
9 }
10 },
11 GREEN
12 {
13 @Override
14 public TrafficLamp nextLamp()
15 {
16 return YELLOW;
17 }
18 },
19 YELLOW
20 {
21 @Override
22 public TrafficLamp nextLamp()
23 {
24 return RED;
25 }
26 };
27 public abstract TrafficLamp nextLamp();
28 }
当枚举只有一个 成员时可以当作单例的实现方式。
1 enum Operation
2 {
3 ADD(3);
4 private Operation(int a)
5 {
6 System.out.println("单例:枚举实现");
7 }
8 }
枚举可以遍历,枚举类.values()方法(这是枚举类型的方法)返回了一个由独立的枚举类实例构成的数组。
总结:
使用枚举类型的基本概念很简单。您可以先定义一个指定的、封闭的值集合。然后,在需要这些值中的某一个值时,可以通过它的名称来指定它。深入理解枚举,枚举用到了很多的知识点,有内部类,以及static,final的用法。