黑马程序员——枚举

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

 


 枚举
 枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
 
 例1:
 public class EnumExer {

  public static void main(String[] args) {
   WeekDay weekday=WeekDay.sunday;
   System.out.println(weekday.nextDay());
  }

 }
 
 public abstract class WeekDay {

  private WeekDay() {} // 私有的构造方法禁止其它类调用

  // 定义对象类型为WeekDay的静态常量(final是不可改变的值)。
  final static WeekDay sunday = new WeekDay();
  final static WeekDay monday = new WeekDay();
  final static WeekDay tuesday = new WeekDay();
  final static WeekDay wednesday = new WeekDay();
  final static WeekDay thursday = new WeekDay();
  final static WeekDay friday = new WeekDay();
  final static WeekDay saturday = new WeekDay();

   //调用方法返回后一天对象,this表示当前对象
   public WeekDay nextDay(){
  if(this==sunday) return monday;
  else if(this==monday) return tuesday;
   else if(this==tuesday) return wednesday;
    else if(this==wednesday) return thursday;
  else if(this==thursday) return friday;
  else if(this==friday) return saturday;
  else return sunday;
  }
   //重写toString方法,输出字符串
  public String toString() {
   if (this == sunday) return "sunday";
   else if (this == monday) return "monday";
   else if (this == tuesday) return "tuesday";
   else if (this == wednesday) return "wednesday";
   else if (this == thursday) return "thursday";
   else if (this == friday) return "friday";
   else return "saturday";
  }
 }

 例2:
 public abstract class WeekDay {

  private WeekDay() {} // 私有的构造方法禁止其它类调用

  //用子类创建实例对象,子类是内部类,子类没有名字称为匿名类
  final static WeekDay sunday = new WeekDay(){  
  
   //重写父类方法nextDay();
   public WeekDay nextDay() {
   
    return monday;
   }
  
  };
  final static WeekDay monday = new WeekDay(){

   
   public WeekDay nextDay() {
    
    return tuesday;
   }
  
  };
  final static WeekDay tuesday = new WeekDay(){

   
   public WeekDay nextDay() {
   
    return wednesday;
   }
  
  };
  final static WeekDay wednesday = new WeekDay(){

   
   public WeekDay nextDay() {
    
    return thursday;
   }
  
  };
  final static WeekDay thursday = new WeekDay(){

   
   public WeekDay nextDay() {
   
    return friday;
   }
  
  };
  final static WeekDay friday = new WeekDay(){

   
   public WeekDay nextDay() {
    
    return saturday;
   } 
  
  };
  final static WeekDay saturday = new WeekDay(){

   
   public WeekDay nextDay() {
    
    return sunday;
   }
  
  };
 
  //采用抽象方法定义nextDay就将大量的if else语句转移成了一个个独立的类。
  public abstract WeekDay nextDay();
 
  //重写toString方法,输出字符串
   public String toString() {
    if (this == sunday) return "sunday";
    else if (this == monday) return "monday";
    else if (this == tuesday) return "tuesday";
    else if (this == wednesday) return "wednesday";
    else if (this == thursday) return "thursday";
    else if (this == friday) return "friday";
    else return "saturday";
   }
  }

 枚举的基本应用
 例3: 

 public class EnumTest {

  public static void main(String[] args) {
   WeekDay weekday=WeekDay.MON;//枚举类型对象
  
   System.out.println(weekday);//自动重写toString方法
   System.out.println(weekday.name());//对象的名字
   System.out.println(weekday.ordinal());//对象排第几位
   //枚举类的静态方法,通过字符串获取对象
   //System.out.println(WeekDay.valueOf(字符串).toString());
   System.out.println(WeekDay.values().length);
  }

 }
 
 public enum WeekDay {
  SUN, MON, TUE, WED, THU, FRI, SAT;// 枚举元素对象
 }
 
 枚举的构造函数
 例4:
 public enum WeekDay {
  SUN(), MON(), TUE(9), WED, THU, FRI, SAT(0);
  // 构造方法必须在枚举元素对象列表之后定义
  private WeekDay() {
   System.out.println("无参构造函数");
  }

  private WeekDay(int day) {
   System.out.println("有参构造函数");
  } 
 }
 带有抽象方法的枚举
 例5:
 public enum TrafficLamp { //内部枚举类
  RED(30){ //调用有参构造函数
   public TrafficLamp nextLamp(){  //匿名子类实现抽象方法
    return GREEN;
   }
  },
  YELLOW(5){
   public TrafficLamp nextLamp(){
    return RED;
   }
  },
  GREEN(30){
   public TrafficLamp nextLamp(){
    return YELLOW;
   }
  };
  private int time;
  private TrafficLamp(int time){//有参构造函数
   this.time=time;
  }
  public abstract TrafficLamp nextLamp();
  
 }

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

详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值