枚举(一)快速归类整型常数
枚举类型是一种特殊的引用类型,它的声明和使用与类和接口有类似的地方,可以在其它类的内部声明,但不能在方法内部声明。
每个枚举类型都隐含的继承了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()等,不一一介绍了。
看似简单的知识背后,承载的是收获和成长!