您的位置:首页 > 编程语言 > Java开发

Java 枚举使用方法

2014-02-25 12:48 399 查看
    JDK 5提供了enum关键字,实现了对枚举类型的支持。    枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见。 例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY,就是一个枚举。    1.枚举的实现     public enum Week { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;}    实现一个枚举是相当简单的,和实现一个类基本上差不多,只要使用enum这个关键字就可以了。枚举实际上继承了Enum这个抽象类,因为Java的单继承性,所以我们自己实现的枚举不能再继承别的类了。   2.枚举的实用     为了实用枚举,需要创建一个该类型的引用,并将其赋值给某个实例:      Week week =Week.MONDAY ;     尽管enum看起来像是一种新的数据类型,但是在很大程度上,我们可以讲enum当成一个普通类来处理。事实上enum确实是类,并且具有自己的方法。      enum有一个特别适用的特性,就是和可以在switch语句内使用:public static void main(String[] args) {  Week week = Week.TUESDAY;  switch(week){  case SUNDAY:   System.out.println("SUNDAY");   break;  case MONDAY:   System.out.println("MONDAY");   break;  case TUESDAY:   System.out.println("TUESDAY");   break;  case THURSDAY:   System.out.println("THURSDAY");   break;  case WEDNESDAY:   System.out.println("WEDNESDAY");   break;  case FRIDAY:   System.out.println("FRIDAY");   break;  case SATURDAY:   System.out.println("SATURDAY");   break;  } }    3.枚举中添加新方法      如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum实例。 因为枚举实际上继承了Enum,所以可以覆盖父类中的一些方法,通常我们会覆盖toString(),以此来方便调试。     public enum Week { //必须先定义实例,并以分好结束实例的定义 SUNDAY(0,"星期天"), MONDAY(1,"星期一"), TUESDAY(2,"星期二"), WEDNESDAY(3,"星期三"), THURSDAY(4,"星期四"), FRIDAY(5,"星期五"), SATURDAY(6,"星期六");  // 成员变量 private String name; private int value;  //构造方法 且不能是public,否则编译出错 Week(int value, String name){  this.name = name;  this.value = value; }  public String getName() {  return name; } public int getValue() {  return value; }  @Override public String toString() {  return name + ":" +value; } public static void main(String[] args) {  Week week = Week.TUESDAY;  switch(week){  case SUNDAY:   System.out.println("SUNDAY");   break;  case MONDAY:   System.out.println("MONDAY");   break;  case TUESDAY:   System.out.println("TUESDAY");   break;  case THURSDAY:   System.out.println("THURSDAY");   break;  case WEDNESDAY:   System.out.println("WEDNESDAY");   break;  case FRIDAY:   System.out.println("FRIDAY");   break;  case SATURDAY:   System.out.println("SATURDAY");   break;  } }}    4.枚举实现接口      枚举可以当做一个普通类,所以可以像普通类一样来实现接口,实现接口的方法也和普通类一样       interface Info{         public String getInfo();       }       public enum Week implements Info{        @Override public String getInfo() {  return null; }        }    5.遍历枚举     枚举提供了values()方法,可以用这个方法很轻松的实现多枚举的遍历 for(Week w : Week.values()){   System.out.println(w);  }      因为我们覆盖了toString(),所以输出结果为:        星期天:0星期一:1星期二:2星期三:3星期四:4星期五:5星期六:6     值得补充的一点是:values()方法是编译器插入到enum定义中的static方法。所以,当你将enum实例向上转型为父类Enum时,values()就不可访问了。解决办法:在Class中有一个getEnumConstants()方法,所以即便Enum接口中没有values()方法,我们仍然可以通过Class对象取得所有的enum实例。       6.EnumMap       publicclass EnumMap<K extends Enum<K>,V>
extends AbstractMap<K,V>
implements Serializable, Cloneable
如下例:
 //以枚举类型当key,必须指定类型
EnumMap<Week, String> map = new EnumMap<Week, String>(Week.class);
map.put(MONDAY, "一");
map.put(TUESDAY, "二");
map.put(WEDNESDAY, "三");
map.put(THURSDAY, "四");
map.put(FRIDAY, "五");
map.put(SATURDAY, "六");
map.put(SUNDAY, "七");
7.Enumset
public abstract class EnumSet<E extends Enum<E>>
extends AbstractSet<E>
implements Cloneable, Serializable
与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
此类可以帮助我们建立枚举值的集合,里面提供了一系列的静态方法,可以指定不同的集合建立方式。
public static <E extends Enum<E>> EnumSet<E> of(E first,
E... rest)
创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能,该方法可以创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。
参数:
first - 此 set 最初要包含的元素
rest - 此 set 最初要包含的其余元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null,或 rest 为 null
EnumSet<Week> set = EnumSet.of(MONDAY,TUESDAY);
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)
创建一个具有指定元素类型的空枚举 set。
参数:
elementType - 此枚举 set 的元素类型的 class 对象
抛出:
NullPointerException - 如果 elementType 为 null
EnumSet<Week> set2 = EnumSet.noneOf(Week.class);
set2.add(MONDAY);
f
8.枚举中定义抽象方法SUNDAY(0,"星期天") {@Overridepublic void print() {// TODO Auto-generated method stub}},MONDAY(1,"星期一") {@Overridepublic void print() {}},TUESDAY(2,"星期二") {@Overridepublic void print() {}},WEDNESDAY(3,"星期三") {@Overridepublic void print() {}},THURSDAY(4,"星期四") {@Overridepublic void print() {}},FRIDAY(5,"星期五") {@Overridepublic void print() {}},SATURDAY(6,"星期六") {@Overridepublic void print() {}};public abstract void print();

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 枚举