枚举

来源:互联网 发布:网络倒卖警服 编辑:程序博客网 时间:2024/06/02 05:31

参考来源:http://www.cnblogs.com/hyl8218/p/5088287.html

枚举类型是单例模式的,创建枚举类型要使用enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

package com.hmw.test;/** * 枚举测试类 * @author <a href="mailto:hemingwang0902@126.com">何明旺</a> */public enum EnumTest {    MON, TUE, WED, THU, FRI, SAT, SUN;}
这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest>("MON",0);new Enum<EnumTest>("TUE",1);new Enum<EnumTest>("WED",2);    ... ...

public class Test {    public static void main(String[] args) {        for (EnumTest e : EnumTest.values()) {            System.out.println(e.toString());        }                 System.out.println("----------------我是分隔线------------------");                 EnumTest test = EnumTest.TUE;        switch (test) {        case MON:            System.out.println("今天是星期一");            break;        case TUE:            System.out.println("今天是星期二");            break;        // ... ...        default:            System.out.println(test);            break;        }    }}

输出结果:


MONTUEWEDTHUFRISATSUN----------------我是分隔线------------------今天是星期二


如果我们在枚举类附上自己写的构造函数,则在此基础上添加两个参数,生成新的构造函数例如如下情况:
enumAccountType{    SAVING, FIXED, CURRENT;    privateAccountType()    {        System.out.println(“It is a account type”);    }}
 变成: 
 privateAccountType(String s, inti){  super(s,i); System.out.println(“It is a account type”); }
而在这个类中,会添加若干字段来代表具体的枚举类型:
publicstaticfinal AccountType SAVING;publicstaticfinal AccountType FIXED;publicstaticfinal AccountType CURRENT;
而且还会添加一段static代码段:
static{    SAVING = newAccountType("SAVING", 0);    ...  CURRENT = newAccountType("CURRENT", 0);   $VALUES = newAccountType[]{         SAVING, FIXED, CURRENT    } }
这里定义的构造函数中的打印代码被执行了3遍。
enum 对象的常用方法介绍
int compareTo(E o) 比较此枚举与指定对象的顺序。
Class<E> getDeclaringClass() 返回与此枚举常量的枚举类型相对应的 Class 对象。
String name()   返回枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) 返回带指定名称的指定枚举类型的枚举常量。
public class Test {    public static void main(String[] args) {        EnumTest test = EnumTest.TUE;                 //compareTo(E o)        switch (test.compareTo(EnumTest.MON)) {        case -1:            System.out.println("TUE 在 MON 之前");            break;        case 1:            System.out.println("TUE 在 MON 之后");            break;        default:            System.out.println("TUE 与 MON 在同一位置");            break;        }                 //getDeclaringClass()        System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName());                 //name() 和  toString()        System.out.println("name(): " + test.name());        System.out.println("toString(): " + test.toString());                 //ordinal(), 返回值是从 0 开始        System.out.println("ordinal(): " + test.ordinal());    }}


TUE 在 MON 之后getDeclaringClass(): com.hmw.test.EnumTestname(): TUEtoString(): TUEordinal(): 1








原创粉丝点击