黑马程序员——高新技术(枚举)

------- android培训java培训、期待与您交流! ----------

枚举就是让某个类型的变量的取值只能为若干个固定值的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值。普通变量的方式在开发阶段无法实现这一目标。

1.用普通类来模拟枚举类。

可以在普通类中定义共有的final静态成员。

package cn.itcast.day1;
public abstract class WeekDay1 {
 private WeekDay1(){}
 public final static WeekDay1 SUN = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return MON;
  }
  
 };
 public final static WeekDay1 MON = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return TUE;
  }
  
 };
 public final static WeekDay1 TUE = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return WED;
  }};
 public final static WeekDay1 WED = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return THU;
  }};
 public final static WeekDay1 THU = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return FRI;
  }};
 public final static WeekDay1 FRI = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return SAT;
  }};
 public final static WeekDay1 SAT = new WeekDay1(){
  @Override
  public WeekDay1 nextDay() {
   // TODO Auto-generated method stub
   return SUN;
  }};
 
 public abstract WeekDay1 nextDay();
 
 
 public String toString(){
  if(this==SUN){
   return "SUN";
  }else if(this == MON){
   return "MON";
  }else if(this == TUE){
   return "TUE";
  }else if(this == WED){
   return "WED";
  }else if(this == THU){
   return "THU";
  }else if(this == FRI){
   return "FRI";
  }else{
   return "MON";
  }
 }
}


 

2.定义枚举类
定义枚举使用的关键字是enum

 

System.out.println(weekDay);//toString()
  System.out.println(weekDay2.name());
  System.out.println(weekDay2.ordinal());//排行
  System.out.println(WeekDay.valueOf("SUN"));//根据元素名字返回该元素名对应的实例对象
  System.out.println(WeekDay.values().length);//把所有元素转换成数组

枚举类提供了toString的方法。

枚举类有name()方法。打印也是枚举元素的名字。

枚举类又ordinal()方法,打印出该枚举元素的排位,第一个元素排位为0

枚举类有个静态方法ValueOf把一个字符串对应成对应的枚举元素。

枚举类有个静态方法Values,把所有枚举元素存入一个数组内。可以用来遍历该枚举类中元素。

 

 

public enum WeekDay{
    SUN(1),MON,TUE,WED,THU,FRI,SAT;
    private WeekDay(){System.out.println("first");}//构造方法必须放在成员列表之后。
    private WeekDay(int day){System.out.println("second");}
  }

 

****枚举类的构造方法必须在成员列表之后。也就是元素列表必须在最前面,且下面有内容的话 元素列表结尾要有分号。

构造方法要私有的。只要你用到了这个枚举类,他里面的静态变量都会被初始化。枚举类里元素等效于静态成员变量!!!

 

****带抽象方法的枚举类

内部类可以加上4个访问修饰符。外部类只有2个访问修饰符,Public和默认的。

public enum TrafficLamp{
  RED(30) {
   @Override
   public TrafficLamp nextLamp() {
    // TODO Auto-generated method stub
    return GREEN;
   }
  },GREEN(45) {
   @Override
   public TrafficLamp nextLamp() {
    // TODO Auto-generated method stub
    return YELLOW;
   }
  },YELLOW(5) {
   @Override
   public TrafficLamp nextLamp() {
    // TODO Auto-generated method stub
    return RED;
   }
  };
  public abstract TrafficLamp nextLamp();
  private int time;
  private TrafficLamp(int  time){
   this.time = time;
  }
 }
}


如果枚举只有一个成员,就可以作为一个单例

-------android培训java培训、期待与您交流! ----------详细请查看:http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值