黑马程序员——枚举

来源:互联网 发布:美工师 编辑:程序博客网 时间:2024/04/28 12:22

---------------------- 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

原创粉丝点击