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 }

 

posted on 2020-12-22 09:55  无聊人,生代码  阅读(384)  评论(0)    收藏  举报