首页 > 技术文章 > 枚举(一)快速归类整型常数

wxywxy 2017-04-26 21:07 原文

枚举类型是一种特殊的引用类型,它的声明和使用与类和接口有类似的地方,可以在其它类的内部声明,但不能在方法内部声明。

每个枚举类型都隐含的继承了Enum抽象类,Enum又是Object类的子类,所以其方法即可被枚举类型调用。

1.枚举类型的定义

枚举类型声明使用enum关键字,罗列出所有可用值,这些值也称为枚举元素。

 1 enum WeekDay
 2 {
 3     SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;
 4 }
 5 public class EnumDemo
 6 {
 7     public static void main(String[] args)
 8     {
 9         WeekDay rest = WeekDay.SUNDAY;//枚举名.枚举值
10         System.out.println(rest);
11     }
12 }

上述例子中,SATURDAY后面的;可以省略,但如果枚举中还声明了方法,则不可省略。

2.凡被说明为WeekDay类型变量的取值,只能是枚举元素其中之一。而枚举变量的说明有以下三种方式:

enum WeekDay{
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
};
enum WeekDay today;//先定义,后说明
enum WeekDay{
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}today;//定义的同时说明
enum {
    SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}today;//定义无名枚举

这三种方式在Eclipse中是报错的,但书上确实是这么讲的,还没弄明白是怎么回事,等弄懂了再回来修改。

3.枚举实用——switch语句

 1 enum WeekDay{
 2     SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
 3 };
 4 public class EnumDemo
 5 {
 6     public static void main(String[] args)
 7     {
 8         WeekDay today = WeekDay.MONDAY;
 9         switch(today)
10         {
11         case SUNDAY:
12         {
13             System.out.println("今天是星期日!");
14             break;
15         }
16         case MONDAY:
17         {
18             System.out.println("今天是星期一!");
19             break;
20         }
21         case TUESDAY:
22         {
23             System.out.println("今天是星期二!");
24             break;
25         }
26         case WEDNESDAY:
27         {
28             System.out.println("今天是星期三!");
29             break;
30         }
31         case THURSDAY:
32         {
33             System.out.println("今天是星期四!");
34             break;
35         }
36         case FRIDAY:
37         {
38             System.out.println("今天是星期五!");
39             break;
40         }
41         case SATURDAY:
42         {
43             System.out.println("今天是星期六!");
44             break;
45         }
46         }
47     }
48 }

4.枚举类型的方法

每种枚举类型E都有两个自动生成的静态方法:

public static E[] values():返回一个包含了所有枚举常量的数组(按照声明顺序存储)。

WeekDay[] allweek = WeekDay.values();//用枚举数组读取枚举中的值
for(WeekDay aweek:allweek)
{
    System.out.println(aweek);//遍历数组输出
}

public static E valueOf(String name):返回指定名字的枚举常量。(若无,则抛出IllegalArgumentException异常。)

WeekDay w = WeekDay.valueOf("TUESDAY");
System.out.println(w);

调用父类Enum类的方法:

public int ordinal():返回枚举常量的序数。

WeekDay[] allweek = WeekDay.values();
for(WeekDay aweek:allweek)
{
    System.out.println(aweek.name()+"-->"+aweek.ordinal());//输出各个枚举元素的编号
}

Enum类中还有很多实用的方法,如clone()、name()等,不一一介绍了。

推荐阅读