一、为什么使用枚举
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
面对这样的常量我们往往使用 public final static 去定义,而使用Enum枚举类型,可以将以前笨拙的代码变得优雅简单!
二、枚举的特点
1.枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal)
构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。
2.他是个普通的类,它已经继承了Enum (java 是单继承)所以他不能继承其他类了。
1 public enum EnumTest { 2 //使用枚举定义常量 3 RED(1), GREEN(2) , YELLOW(3) ; 4 private int code; 5 // 构造函数,枚举类型只能为私有 6 private EnumTest(int code){ 7 this.code=code; 8 } 9 public String toString(){ 10 return String.valueOf(this.code); 11 } 12 /** 13 * 演示枚举类型的遍历 14 */ 15 private static void testTraversalEnum() { 16 EnumTest[] enumTest = EnumTest.values (); 17 for (EnumTest eEnumTest : enumTest) { 18 System. out .println( " 当前灯 name : " + eEnumTest.name()); 19 System. out .println( " 当前灯: " + eEnumTest); 20 System. out .println( " 当前灯 ordinal : " + eEnumTest.ordinal()); 21 } 22 } 23 /** 24 * 演示 EnumMap 的使用, EnumMap 跟 HashMap 的使用差不多,只不过 key 要是枚举类型 25 */ 26 private static void testEnumMap() { 27 // 1. 演示定义 EnumMap 对象, EnumMap 对象的构造函数需要参数传入 , 默认是 key 的类的类型 28 EnumMap<EnumTest, String> currEnumMap = new EnumMap<EnumTest, String>(EnumTest.class ); 29 currEnumMap.put(EnumTest.RED , "红灯"); 30 currEnumMap.put(EnumTest.GREEN , "绿灯"); 31 currEnumMap.put(EnumTest.YELLOW , "黄灯"); 32 // 2. 遍历对象 33 for (EnumTest aEnumTest : EnumTest.values ()) { 34 System. out .println( "[key=" + aEnumTest.name() + ",value="+ currEnumMap.get(aEnumTest) + "]" ); 35 } 36 } 37 /** 38 * 演示 EnumSet 如何使用, EnumSet 是一个抽象类,获取一个类型的枚举类型内容 <BR/> 39 * 可以使用 allOf 方法 40 */ 41 private static void testEnumSet() { 42 EnumSet<EnumTest> currEnumSet = EnumSet.allOf (EnumTest.class ); 43 for (EnumTest aEnumTestSetElement : currEnumSet) { 44 System. out .println( " 当前 EnumSet 中数据为: " + aEnumTestSetElement); 45 } 46 } 47 /** 48 * switch与enum的结合使用 49 */ 50 private static void testsWitch() { 51 EnumTest switchState = EnumTest.RED; 52 switch (switchState) { 53 case RED: 54 System.out.println("RED"); 55 break; 56 case GREEN: 57 System.out.println("GREEN"); 58 break; 59 default: 60 System.out.println("YELLOW"); 61 break; 62 } 63 } 64 public static void main(String[] args) { 65 testTraversalEnum(); 66 testEnumMap(); 67 testEnumSet(); 68 testsWitch(); 69 } 70 }