枚举就是要某个类型的变量的取值只能是几个固定值中的某一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式无法实现这一目标;
枚举的实现:
package learn; /** * 枚举 * @author hui */ public class EnumTest { public static void main(String[] args) { WeekDay weekDay=WeekDay.SUN;//自己定义的类型WeekDay System.out.println(weekDay.nextDay().toString()); } } 在上面的类中,自己定义了一个类型WeekDay,建立一个自己的枚举类WeekDay_1;
package learn;
public class WeekDay_1 { /* 这个类必须要有一个私有的构造 */ private WeekDay_1(){}; public static final WeekDay_1 SUN = new WeekDay_1() ;//星期天 public static final WeekDay_1 MON = new WeekDay_1() ;//星期一 public static final WeekDay_1 TUS = new WeekDay_1() ;//星期二 public static final WeekDay_1 WEN = new WeekDay_1() ;//星期三 public static final WeekDay_1 THUR = new WeekDay_1() ;//星期四 public static final WeekDay_1 FRI = new WeekDay_1() ;//星期五 public static final WeekDay_1 SAT = new WeekDay_1() ;//星期六
/* * 他有一个方法,返回下一天 * */ public WeekDay_1 nextDay(){ if (this==SUN) { return MON; } else if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else if(this==FRI){ return SAT; }else { return SUN; } }
/** * 重写toString()方法 */ public String toString(){ if (this == SUN) { return "Sunday"; } else if (this == MON) { return "Monday"; } else if (this == TUS) { return "Tuesday"; } else if (this == WEN) { return "Wednesday"; } else if (this == THUR) { return "Thursday"; } else if (this == FRI) { return "Friday"; } else { return "Saturday"; } } }
上面的方法,如果因为if..else..太过繁琐,可以写成:
package learn;
public abstract class WeekDay { private WeekDay() { }
//使用内部类的方式来实现nextDay
public static final WeekDay SUN = new WeekDay() { @Override public WeekDay nextDay() { return MON; } }; public static final WeekDay MON = new WeekDay() { @Override public WeekDay nextDay() { return TUS; } }; public static final WeekDay TUS = new WeekDay() { @Override public WeekDay nextDay() { return WEN; } }; public static final WeekDay WEN = new WeekDay() { @Override public WeekDay nextDay() { return THUR; } }; public static final WeekDay THUR = new WeekDay() { @Override public WeekDay nextDay() { return FRI; } }; public static final WeekDay FRI = new WeekDay() { @Override public WeekDay nextDay() { return SAT; } }; public static final WeekDay SAT = new WeekDay() { @Override public WeekDay nextDay() { return SUN; } };
/* * public WeekDay nextDay(){ if (this==SUN) { return MON; } else * if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else * if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else * if(this==FRI){ return SAT; }else { return SUN; } } */
public abstract WeekDay nextDay();
public String toString() { if (this == SUN) { return "Sunday"; } else if (this == MON) { return "Monday"; } else if (this == TUS) { return "Tuesday"; } else if (this == WEN) { return "Wednesday"; } else if (this == THUR) { return "Thursday"; } else if (this == FRI) { return "Friday"; } else { return "Saturday"; } } }
使用JDK自带的枚举:
package learn;
/**
* 枚举
* @author hui
*
*/
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay=WeekDay.SUN;
System.out.println(weekDay.nextDay().toString());
WeekDay_2 weekDay2=WeekDay_2.MON;
System.out.println(weekDay2.name());//返回当前对象的名字
System.out.println(weekDay2.toString());//返回当前对象的toString
System.out.println(weekDay2.ordinal());//返回当前对象的排序
}
/**
* 枚举
* @author hui
*
*/
public enum WeekDay_2{
SUN,MON,TUS,WEN,THUR,FRI,SAT;//各个值之间用逗号隔开
}
}