枚举类型出现之前,在java的接口或者是类中经常出现public static final修饰的常量,为了让程序员抛弃这种常量
所以就出现了枚举语法,同时在一个大项目中,有不同的人协作完成一个任务,在项目中所用到的比如星期,月份,等这样的会用不同的命名发生冲突,枚举类型还可以屏蔽枚举值的类型信息,完成封装的要求。枚举类就是一个类,,可以用类的方法来理解枚举enum;
第一:枚举的基本应用:
public class WeekDay
{
public enum WeekDay{
SUN,MON,TUE,WED,THU,FN,SAT
}
/*枚举类型可以代替java中的public static final,所以的枚举类型都继承于枚举类:
* protected Enum(String name,int ordinal);
*/
public static void main(String []args){
WeekDay today=WeekDay.SAT; //在初始化的时候,应该是WeekDay 的对象初始化;
System.out.println("今天是"+today);
System.out.println("今天是"+today.name());
System.out.println("今天是"+today.toString());
System.out.println("今天是"+today.ordinal()); //返回此序列的序数
System.out.println("今天是"+WeekDay.valueOf("SAT"));
System.out.println("-------------");
WeekDay[]days=WeekDay.values();
System.out.println("星期中包含"+days.length+"天");
for(WeekDay x:days)
{
System.out.println("星期包含"+x);
}
}
结果是:
今天是SAT
今天是SAT
今天是SAT
今天是6
今天是SAT
今天是SAT
-------------
星期中包含7天
星期包含SUN
星期包含MON
星期包含TUE
星期包含WED
星期包含THU
星期包含FN
星期包含SAT
在使用枚举的构造函数时,使用enum修饰,其中内的元素大多是常量元素,一般大写表示,同时在定义枚举类型的时候,声明常量时,继承了Enum类
格式为:Protected Enum(String name,int ordinal)
参数name为枚举常量的名称,参数ordinal为枚举常量的序数;
其中还有好几个常用的方法:对象.toString():返回枚举常量的名称;对象.属性(name和ordinal)返回响应的值,
valueof (class enumType,String name);返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。
values()方法返回该类中的所有枚举常量;
第二个enum的问题:Enum的本质是类,那么枚举的类也有它的构造函数:
构造函数,也是枚举的构造函数,必须放在枚举常量的后面,即在声明了public enum WeekDay{}之后,才能声明枚举的构造函数,同时枚举的构造函数的修饰符必须是private;枚举类型的自定义的构造函数不能覆盖默认执行的构造函数,只会在之后执行。
public class EnumTest2 {
public enum WeekDay{
SUN,MON,TUE,WED,THU,FN("星期五"),SAT("星期六");
private WeekDay(){
System.out.println("无参数构造函数");
}
private WeekDay(String s){
System.out.println(s+"有参数构造函数");
}
}
public static void main(String []args){
WeekDay today=WeekDay.SAT;
}
}
结果是:
无参数构造函数
无参数构造函数
无参数构造函数
无参数构造函数
无参数构造函数
星期五有参数构造函数
星期六有参数构造函数