枚举:
枚举的作用介绍
枚举就是要让某个类型的变量的取值只能为若干个固定值的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段是无法实现这一目标的。
在学习C的时候,简单的学习过枚举,觉得枚举就像是暴力求解法,把所有可能的情况全部列举出来,一种一种的做出相应的处理;而在这里,java中:枚举是jdk1.5的新特性自定义一种类型,并赋予一些特定的值,当使用这种类型的时候,如果程序员给出的值不是特定的值,编译器则不让其通过编译。
用普通类如何实现枚举功能:
1.私有的构造方法
2.每个元素分别用一个公有的静态成员变量表示
3.可以有若干公有方法或抽象方法,如:下文代码中的nextday()方法就必须是抽象的。
普通写法:WeekDay1类代码:
package cn.itcast;
public class WeekDay1 {
public static void main(String[] args) {
WeekDay1 weekday1 = WeekDay1.MON;
System.out.println(weekday1.nextDay());
}
private WeekDay1(){}
public final static WeekDay1 SUN = new WeekDay1();
public final static WeekDay1 MON = new WeekDay1();
public WeekDay1 nextDay() {
if (this == SUN) {
return MON;
} else {
return SUN;
}
}
public String toString() {
return this ==SUN ? "SUN":"MON";
}
}
枚举实现:
测试类EnumTest类代码:
package cn.itcast;
//测试类:
public class EnumTest {
public static void main(String[] args) {
WeekDay weekday = WeekDay.MON;
System.out.println(weekday.nextDay());
}
}
用枚举实现类WeekDay代码:
package cn.itcast;
public abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN = new WeekDay() {
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON = new WeekDay() {
public WeekDay nextDay() {
return SUN;
}
};
public abstract WeekDay nextDay();
public String toString() {
return this ==SUN ? "SUN":"MON";
}
}
Java5的枚举的基本应用
举例:定义一个枚举WeekDay
扩展:枚举类的values、valueOf、name、toString等方法
总结:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象。
public enum WeekDay{
SUN,MON,THE,WED,THU,FRI,SAT
}
枚举相当于一个类,而枚举类的一个值相当于该类的一个实例对象
如,可以把WeekDay看成一个类,SUN就是WeekDay的一个实体对象了。
枚举的方法:
WeekDayweekday = WeekDay.SUN;
weekday.name(); //获取当前枚举对象的名称 ——SUN
weekday.ordinal(); //获取当前对象在枚举中的序列,从0开始
WeekDay.valueOf(“FRI”); //把一个字符串转换为一个枚举的对象
WeekDay.valuds(); //返回一个数组,获得枚举中所有的对象的值
for(WeekDayday:WeekDay.values()){
System.out.println(day);
}
实现带有构造方法的枚举:
public enum WeekDay {
SUN,MON(5),THE,WED,THU,FRI,SAT;
private WeekDay();
private WeekDay(int day);
}
构造方法必须是私有的,且放在所有枚举元素的后面。因为必须先初始化枚举元素后才可以创建其对应的构造方法
构造方法可带参数。根据创建元素的后面是否带参来指定是执行那一个构造方法
实现带有抽象方法的枚举
public enum TrafficLamp {
// 子类调用父类带有一个参数的构造方法
RED(30){
//为了创建TrafficLamp的实例对象指向RED,先实现TrafficLamp的抽象方法。
public TrafficLamp nextLamp() {
return GREEN;
}},
GREEN(50){
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(5) {
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp(); //抽象方法
private int time;
private TrafficLamp(int time){this.time = time;}
}
当枚举中只有一个元素的时候,它是单例模式。
------- android培训、 java培训、期待与您交流! ----------