java特性之Enum枚举类型

来源:互联网 发布:网络项目运营方案模板 编辑:程序博客网 时间:2024/06/02 01:10

          枚举类型出现之前,在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;}}
结果是:
无参数构造函数无参数构造函数无参数构造函数无参数构造函数无参数构造函数星期五有参数构造函数星期六有参数构造函数