Java 枚举(enum)
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节等等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
枚举声明在类外,实例:
1 enum Color 2 { 3 RED, GREEN, BLUE; 4 } 5 6 public class Test 7 { 8 // 执行输出结果 9 public static void main(String[] args) 10 { 11 Color c1 = Color.RED; 12 System.out.println(c1); 13 } 14 }
内部类中使用枚举
枚举类也可以声明在内部类中,实例:
1 public class Test 2 { 3 enum Color 4 { 5 RED, GREEN, BLUE; 6 } 7 8 // 执行输出结果 9 public static void main(String[] args) 10 { 11 Color c1 = Color.RED; 12 System.out.println(c1); 13 } 14 }
每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。
迭代枚举元素
使用for增强模式
1 enum Color 2 { 3 RED, GREEN, BLUE; 4 } 5 public class MyClass { 6 public static void main(String[] args) { 7 for (Color myVar : Color.values()) { 8 System.out.println(myVar); 9 } 10 } 11 }
在 switch 中使用枚举类
实例:
1 enum Color 2 { 3 RED, GREEN, BLUE; 4 } 5 public class MyClass { 6 public static void main(String[] args) { 7 Color myVar = Color.BLUE; 8 9 switch(myVar) { 10 case RED: 11 System.out.println("红色"); 12 break; 13 case GREEN: 14 System.out.println("绿色"); 15 break; 16 case BLUE: 17 System.out.println("蓝色"); 18 break; 19 } 20 } 21 }
values(), ordinal() 和 valueOf() 方法
enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Seriablizable 和 java.lang.Comparable 两个接口。
values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:
- values() 返回枚举类中所有的值。
- ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
- valueOf()方法返回指定字符串值的枚举常量。
实例:
1 enum Color 2 { 3 RED, GREEN, BLUE; 4 } 5 6 public class Test 7 { 8 public static void main(String[] args) 9 { 10 // 调用 values() 11 Color[] arr = Color.values(); 12 13 // 迭代枚举 14 for (Color col : arr) 15 { 16 // 查看索引 17 System.out.println(col + " at index " + col.ordinal()); 18 } 19 20 // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException 21 System.out.println(Color.valueOf("RED")); 22 // System.out.println(Color.valueOf("WHITE")); 23 } 24 }
枚举类成员
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
1 enum Color 2 { 3 RED, GREEN, BLUE; 4 5 // 构造函数 6 private Color() 7 { 8 System.out.println("Constructor called for : " + this.toString()); 9 } 10 11 public void colorInfo() 12 { 13 System.out.println("Universal Color"); 14 } 15 } 16 17 public class Test 18 { 19 // 输出 20 public static void main(String[] args) 21 { 22 Color c1 = Color.RED; 23 System.out.println(c1); 24 c1.colorInfo(); 25 } 26 }
浙公网安备 33010602011771号