枚举
枚举是一种特殊的类,是java jdk1.5的新特性
定义枚举用的关键字是enum.枚举就是让某些变量的取值只能是在若干个固定的值其中的一个,把这些值类类型固定,并且罗列出来,否则编译器就会报错。
如定义一个变量weekday变量代表一个星期中的某天,一个星期中只有七天,而且是7个固定的值,所以可以用枚举的功能来实现。
如果赋值是这7个值之外的值,就会报错。
在jdk1.5之前,定义枚举的方法是自定义类,在此类中,定义变量用static和final修饰,达到值变量值固定修改的目的。
自定义枚举的注意事项:枚举的元素列表必须放在类的开头第一行,必须私有化构造方法。
当有多个构造方法时,在元素后加(参数)即调用哪个构造方法。
常用方法:
String name();返回其此枚举常量目的名称。
Enum valueOf(class enumType,String name)返回带指定名称的指定枚举型的枚举常量
普通示例:用普通方法实现枚举的功能
定义一个类Weekday表示是星期,有七个字段分别是周一至周五,还有获下一天的方法。
abstract class WeekDay//定义抽象类,
{
private WeekDay(){}//私有化构造方法,让调用者不能创建对象。
//定义值,用final修饰让值固定,
public static final WeekDay SUN=new WeekDay(){
public WeekDay nextDay()//复写nextDay()方法
{
return MON;
}
};
......
//周一到周六省略
......
public static final WeekDay SAT=new WeekDay(){
public WeekDay nextDay()
{
return SUN;
}
};
//定义抽象方法,获取下一天
public abstract WeekDay nextDay();
public String toString()
{
if(this==SUN)
{
return "SUN";
}
.......
省略周二到周六
.....
else if(this==MON)
{
return "MON";
}
return null;
}
}
class EnumText
{
public static void main(String[] args)
{
WeekDay weekday=WeekDay.SUN;//获取星期值
System.out.println(weekday.nextDay());//打印下一天
}
}
用枚举实现
和上面普通方法比较发现,代码简单了许多,但是原理一样。同时自动复写有了toString()方法
enum WeekDay//等同于上面的类
{
//枚举列表,下同
SUN{
public WeekDay nextDay()//复写抽象方法,下同
{
return MON;
}
},
MON{
public WeekDay nextDay()
{
return TUE;
}
},TUE{
public WeekDay nextDay()
{
return WED;
}
},WED{
public WeekDay nextDay()
{
return THI;
}
},THI{
public WeekDay nextDay()
{
return FRI;
}
},FRI{
public WeekDay nextDay()
{
return SAT;
}
},SAT{
public WeekDay nextDay()
{
return SUN;
}
};
private WeekDay(){}//定义构造方法
public abstract WeekDay nextDay();//定义抽象方法。
}
浙公网安备 33010602011771号