java中枚举类的使用详解

 1 /*
 2  * 通过JDK5提供的枚举来做枚举类
 3  */
 4 public enum Direction2 {
 5     FRONT("前"), BEHIND("后"), LEFT("左"), RIGHT("右");
 6 
 7     private String name;
 8 
 9     private Direction2(String name) {
10         this.name = name;
11     }
12 
13     public String getName() {
14         return name;
15     }
16 
17 }

//-------------------------

//测试类,每一个对象都是被枚举类放进了数组中,自带索引值。

枚举类: 格式是:只有枚举项的枚举类
          public enum 枚举类名 {

                                      枚举项1,枚举项2,枚举项3…;

          }
注意事项
•定义枚举类要用关键字enum
•所有枚举类都是Enum的子类
•枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
•枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
•枚举类也可以有抽象方法,但是枚举项必须重写该方法,使用匿名内部类的方式。
•枚举在switch语句中的使用
 1 public class EnumMethodDemo {
 2     public static void main(String[] args) {
 3         // int compareTo(E o)
 4         Direction2 d21 = Direction2.FRONT;
 5         Direction2 d22 = Direction2.BEHIND;
 6         Direction2 d23 = Direction2.LEFT;
 7         Direction2 d24 = Direction2.RIGHT;
 8         System.out.println(d21.compareTo(d21));
 9         System.out.println(d21.compareTo(d24));
10         System.out.println(d24.compareTo(d21));
11         System.out.println("---------------");
12         // String name()
13         System.out.println(d21.name());
14         System.out.println(d22.name());
15         System.out.println(d23.name());
16         System.out.println(d24.name());
17         System.out.println("--------------");
18         // int ordinal()
19         System.out.println(d21.ordinal());
20         System.out.println(d22.ordinal());
21         System.out.println(d23.ordinal());
22         System.out.println(d24.ordinal());
23         System.out.println("--------------");
24         // String toString()
25         System.out.println(d21.toString());
26         System.out.println(d22.toString());
27         System.out.println(d23.toString());
28         System.out.println(d24.toString());
29         System.out.println("--------------");
30         // <T> T valueOf(Class<T> type,String name)
31         Direction2 d = Enum.valueOf(Direction2.class, "FRONT");
32         System.out.println(d.getName());
33         System.out.println("----------------");
34         // values()
35         // 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
36         Direction2[] dirs = Direction2.values();
37         for (Direction2 d2 : dirs) {
38             System.out.println(d2);
39             System.out.println(d2.getName());
40         }
41     }
42 }

//----------------------

//下面贴一个使用匿名内部类创建枚举对象实例的demo

 1 /*
 2  * 通过JDK5提供的枚举来做枚举类
 3  */
 4 public enum Direction3 {
 5     FRONT("前") {
 6         @Override
 7         public void show() {
 8             System.out.println("前");
 9         }
10     },
11     BEHIND("后") {
12         @Override
13         public void show() {
14             System.out.println("后");
15         }
16     },
17     LEFT("左") {
18         @Override
19         public void show() {
20             System.out.println("左");
21         }
22     },
23     RIGHT("右") {
24         @Override
25         public void show() {
26             System.out.println("右");
27         }
28     };
29 
30     private String name;
31 
32     private Direction3(String name) {
33         this.name = name;
34     }
35 
36     public String getName() {
37         return name;
38     }
39 
40     public abstract void show();
41 }

//----------------

//在switch语句中可以直接只用

switch (dd) {
  case FRONT:
  System.out.println("你选择了前");
  break;
case BEHIND:
  System.out.println("你选择了后");
  break;
case LEFT:
  System.out.println("你选择了左");
  break;
case RIGHT:
  System.out.println("你选择了右");
  break;
}

posted @ 2016-04-26 20:55  我所向往的美好  阅读(2562)  评论(0编辑  收藏  举报