java的枚举

来源:互联网 发布:js select 选中事件 编辑:程序博客网 时间:2024/06/05 15:05

1.枚举的定义

枚举是从Java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合.

定义格式: 
[修饰符] enum  枚举类名
{
      常量A,常量B,常量C;

}

enum Weekday {MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}


2.枚举类的特点

枚举特点
① 枚举的直接父类java.lang.Enum,但是不能显示继承Enum

enum Weekday extends Enum  //报错{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}
② 枚举就相当于一个类,可以定义构造方法、成员变量、普通方法和抽象方法

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;public void doWork(){System.out.println("普通方法");};}
③ 默认私有构造方法,即使不写访问权限也是private((假构造器,底层没有无参数构造器)。

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;Weekday(){System.out.println("无参数构造方法");}}

④ 每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday week = new Weekday();  //尝试创建对象,结果报错: 无法实例化枚举类型}}
⑤ 枚举实例必须位于枚举体中的最开始部分,枚举实例列表最后要有分号与其他成员相分隔。

错误写法:

enum Weekday{void doWork(){System.out.println("其他方法");};MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;   //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错}
正确写法:

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;   //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错void doWork(){System.out.println("其他方法");};}

⑥ 枚举实例后有花括号时,该实例是枚举类的匿名内部类对象(查看编译后的class文件)。

3.枚举的使用

   1):枚举中都是全局公共的静态常量,可以直接使用枚举类名调用.
          Weekday day = Weekday.SATURDAY;

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday day = Weekday.SUNDAY;System.out.println(day);  //SUNDAY}}

   2):因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.
         String   name = 枚举对象.name();  //返回枚举对象的常量名称
         int      ordinal = 枚举对象.ordinal();//返回枚举对象的序号,从0开始.
         String  str       =  枚举对象.toString():返回 枚举对象的常量名称
   3):编译器生成的枚举类的静态方法(从反编译代码中查看):
         枚举类型[]  values();
          Weekday[] ws   = Weekday.values();:返回当前枚举类型所有的常量,使用一个数组封装起来.
         枚举类型  valueof(String name);
          Weekday  day = Weekday.valueOf("MONDAY");//把一个指定名称字符串转换为当前枚举类中同名的常量.

enum Weekday{MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}class Test{public static void main(String[] args){Weekday sunday = Weekday.SUNDAY;String day = sunday.name();int ordinal = sunday.ordinal();String day2 = sunday.toString();System.out.println(day);  //SUNDAYSystem.out.println(ordinal);  //6System.out.println(day2);  //SUNDAYWeekday[] ws   = Weekday.values();for(Weekday weekday: ws){System.out.println(weekday); //MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY}}}

    4):从java5开始出现枚举,switch也支持操作枚举类型.
          switch只支持int类型,支持枚举是因为底层使用的枚举对象的ordinal,而ordinal的类型依然是int类型.


原创粉丝点击