黑马程序员—枚举

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


1、Enum枚举。

Enum,叫枚举类型。常常用来定义方向、星期等。因为方向一般只有八个值,星期只有七个。如果不用Enum,一般会用数组来表示,那么数组中的各个值的顺序是什么,就不好确定了。你是这样一个顺序,他是那样一个顺序,顺序不一样,相互调用还出错,所以使用Enum,把这些值定义为一个新的类型,如WeekDay{Sun,Mon,TueWedThuFri,Sat};这样WeekDay只能取定义好的七个值,没有其他值可取,也不用取序列号,直接用其值即可。
2、枚举的方法。
int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String name() 返回枚举常量的名称
static <T extends Enum<T>> T valueOf(String name)  返回此字符串表示的枚举常量

用普通类要模拟实现枚举
[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public class EnumDemo {  
  2. //主函数,用来使用EnumWeek实现的方法。  
  3.  public static void main(String[] args) {  
  4.   
  5.  <span style="white-space:pre">   </span> EnumWeek weekDay1 = EnumWeek.Sun;  
  6.   <span style="white-space:pre">  </span>EnumWeek weekDay2 = EnumWeek.Fri;  
  7.   <span style="white-space:pre">  </span>while(!weekDay1.equals(weekDay2)){  
  8.   <span style="white-space:pre">  </span> System.out.println(weekDay1.toString()+":"+weekDay1.ordinal(weekDay1)  
  9.    <span style="white-space:pre"> </span>  + " != "+weekDay2.toString()+":"+weekDay2.ordinal);  
  10.   <span style="white-space:pre">  </span> weekDay1 = weekDay1.nextDay();  
  11.   }  
  12.   System.out.println("=========================");  
  13.   System.out.println(weekDay1.toString()+":"+weekDay1.ordinal(weekDay1)  
  14.     + " != "+weekDay2.toString()+":"+weekDay2.ordinal);  
  15.  }  
  16. }  
  17. //这里模拟实现Enum定义实现WeekDay。  
  18. abstract class EnumWeek {  
  19.  //属性:名字和次序号。  
  20.  String name;  
  21.  int ordinal;  
  22.  //匿名内部类实现对象的实例化,并在内部实现nextDay方法,引出匿名内部类知识。  
  23. //关于匿名内部类的只是补充:匿名内部类,也是一个类,也是new出一个对象,类中实现的方法,在new的时候不会执行,在用new出的对象调用  
  24. //该方法时,才会执行。  
  25.  public static final EnumWeek Sun = new EnumWeek("Sun",0){  
  26.   public EnumWeek nextDay() {  
  27.    return Mon;  
  28.   }  
  29.  };  
  30.  public static final EnumWeek Mon = new EnumWeek("Mon",1){  
  31.   public EnumWeek nextDay() {  
  32.    return Tue;  
  33.   }  
  34.  };  
  35.  public static final EnumWeek Tue = new EnumWeek("Tue",2){  
  36.   public EnumWeek nextDay() {  
  37.    return Wed;  
  38.   }  
  39.  };  
  40.  public static final EnumWeek Wed = new EnumWeek("Wed",3){  
  41.   public EnumWeek nextDay() {  
  42.    return Thu;  
  43.   }  
  44.  };  
  45.  public static final EnumWeek Thu = new EnumWeek("Thu",4){  
  46.   public EnumWeek nextDay() {  
  47.    return Fri;  
  48.   }  
  49.  };  
  50.  public static final EnumWeek Fri = new EnumWeek("Fri",5){  
  51.   public EnumWeek nextDay() {  
  52.    return Sat;  
  53.   }  
  54.  };  
  55.  public static final EnumWeek Sat = new EnumWeek("Sat",6){  
  56.   public EnumWeek nextDay() {  
  57.    return Sun;  
  58.   }  
  59.  };  
  60.  //构造方法。  
  61.  private EnumWeek(String name, int ordinal){  
  62.   this.name = name;  
  63.   this.ordinal = ordinal;  
  64.  };  
  65.  //比较器方法。  
  66.  public int compareTo(EnumWeek e){  
  67.   if(this.ordinal > e.ordinal){  
  68.    return 1;  
  69.   }else if(this.ordinal == e.ordinal){  
  70.    return 0;  
  71.   }else{  
  72.    return -1;  
  73.   }  
  74.  }  
  75.  //判断是否相等的方法,其中用到了比较器方法。  
  76.  public boolean equals(EnumWeek e){  
  77.   if(compareTo(e) == 0){  
  78.    return true;  
  79.   }  
  80.   return false;  
  81.  }  
  82.  //获取序号的方法。  
  83.  public int ordinal(EnumWeek e){  
  84.   return e.ordinal;  
  85.  }  
  86.  //打印时获取的字符串方法。  
  87.  public String toString(){  
  88.   return this.name;  
  89.  }  
  90.  //内部抽象方法,没有方法体。抽象方法只会出现在抽象类中,而抽象类是无法实例化的,这里能实例化,是因为实例的是其子类,而其//子类继承了抽象类,就一定要实现其抽象方法,这里的抽象方法就是nextday。  
  91.  public abstract EnumWeek nextDay();  
  92. }  




-----------  android培训 java培训 、java学习型技术博客、期待与您交流!  ------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值