一、为什么使用枚举
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。
面对这样的常量我们往往使用 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 EnumMapcurrEnumMap = new EnumMap (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 是一个抽象类,获取一个类型的枚举类型内容 39 * 可以使用 allOf 方法40 */41 private static void testEnumSet() {42 EnumSet 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 }