---------------------- 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培训、期待与您交流! ----------------------