黑马程序员--枚举

来源:互联网 发布:映射网络驱动器是什么 编辑:程序博客网 时间:2024/06/01 10:02

---------- ---------- ASP.Net+Android+IOS开发、<A">---------- .Net培训、期待与您交流!">---------- ----------

黑马程序员――枚举

一、  枚举是什么?

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

2.  当枚举中只有一个成员时,就可以作为一种单例的实现的方式。

3.  枚举相当于一个类,其中也可以定义构造方法,成员变量,普通方法和抽象方法

4.  枚举中的元素列表只用逗号隔开,不写其他方法时,结尾处可不加分号,若有方法,必须以分号结尾

5.  枚举元素必须位于枚举体中的最开始部分,枚举元素列表后要有分号与其他成员分隔,把枚举中成员放在枚举元素前,编译器会报告错误。

二、  用普通类实现枚举功能

package com.itheima.note;
/**
 *将构造方法私有,不允许调用者new新的对象
 *
 */
public abstract class WeekDay {
  private WeekDay(){}
  public abstract WeekDay nextDay();
  public static final WeekDay SUN = new WeekDay(){
   public WeekDay nextDay(){
      return MON;
    }
  };
  public static final WeekDay MON = new WeekDay(){
    public WeekDay nextDay(){
      return TUE;
    }
  };
  public static final WeekDay TUE = new WeekDay(){
    public WeekDay nextDay(){
      return WED;
    }
  };
  public static final WeekDay WED = new WeekDay(){
    public WeekDay nextDay(){
      return THU;
    }
  };
  public static final WeekDay THU = new WeekDay(){
    public WeekDay nextDay(){
      return FRI;
    }
  };
  public static final WeekDay FRI = new WeekDay(){
    public WeekDay nextDay(){
      return SAT;
    }
  };
  public static final WeekDay SAT = new WeekDay(){
    public WeekDay nextDay(){
      return SUN;
    }
  };
  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 if(this == SAT){
      return "SAT";
   
    }else{
      return "SUN";

  }  
  } 
}

三、  枚举的基本应用


public class EnumTest {

  public EnumTest() {
  }

  public static void main(String[] args) {
      Lamp firstLamp = Lamp.RED;
    System.out.println(firstLamp.nextLamp());
    System.out.println(Lamp.GREEN.nextLamp());
    System.out.println(Lamp.YELLOW.nextLamp());
  
    WeekDay day1 = WeekDay.SUN;
    System.out.println(day1.name());
    System.out.println(day1.ordinal());
    System.out.println(WeekDay.valueOf("FRI").toString());
    System.out.println(WeekDay.values().length);

  }
  public enum WeekDay{
    SUN(2),MON,TUE,WED,THU,FRI(5),SAT;
    private WeekDay(){System.out.println("first");}
    private WeekDay(int day){System.out.println("second");}
  }
  public enum TrafficLamp{//带构造方法的实现枚举
    RED(30){
   public TrafficLamp nextLamp() {
      return GREEN;
     } },GREEN(35){
    public TrafficLamp nextLamp(){
      return YELLOW;
    } },YELLOW(5){
    public TrafficLamp nextLamp(){
      return RED;
    } };
   private TrafficLamp(){}//不用写,有默认的无参构造函数
   public abstract TrafficLamp nextLamp();
   private int time;
   private TrafficLamp(int time){}  
 }
  public enum TrafficLamp1{//默认无参数构造方法的枚举
    RED,GREEN,YELLOW;
    public TrafficLamp1 nextLamp(){
      if(this == RED){
        return GREEN;
     }else if(this == GREEN){
       return YELLOW;
     }else {
       return RED;
     }
   }
 }

}

----------- ----------- ASP.Net+Android+IOS开发、<A">----------- .Net培训、期待与您交流!">----------- -----------

原创粉丝点击