java中enum的用法总结

来源:互联网 发布:淘宝客服每日工作总结 编辑:程序博客网 时间:2024/05/30 05:22

一、enum的语法与基本作用

创建一个枚举类型需要使用关键字enum,隐含了所创建的类都是java.lang.Enum的子类。枚举类型的每一个值都被映射到protect enum(String name, int ordinal);的构造函数中,在这里枚举的每一个值都被转换成一个字符串,并且同时对应一个下标(从0开始的)。
在实际开发中往往需要处理一些“数据集”,这些数据集在程序中是相对稳定的,如一周的七天或一年四季等,这时枚举就派上了用处。

public enum TestEnum{    //这里的每一个值其实也相当于是一个实例      MON, TUE, WED, THU, FRI, SAT, SUN;}//这段代码其实相当于调用了7次protect enum(String name, int ordinal);new Enum<TestEnum>("MON", 0);new Enum<TestEnum>("TUE", 1);......

二、遍历、switch 等常用操作

对enum进行遍历和switch的操作示例代码:

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

—————-我是分隔线——————
今天是星期二
enum 对象的常用方法介绍

int compareTo(E o)
比较此枚举与指定对象的顺序。

Class getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。

String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。

int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。

String toString()

       返回枚举常量的名称,它包含在声明中。

static

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

三、给枚举类型自定义属性和方法

public enum TestEnum{//必须写在第一行,要么全部赋值要么全不赋值    MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6), SUN(0){    public int text(){        return i;    }};    private int value;    private TestEnum(int value){        this.value = value;    }    public int getValue(){        return value;    }}public static void main(String[] args) {        System.out.println(EnumTest.WED.getValue(););    }

四、EnumMap和EnumSet的应用

public static void main(String[] args) {        // EnumSet的使用    EnumSet<TestEnum> weekSet = Enum.allOf(TestEnum.class);    for(TestEnum day : weekSet){        System.out.println(day);    }        // EnumMap的使用        EnumMap<TestEnum, String> weekMap = new EnumMap(TestEnum.class);        weekMap.put(TestEnum.MON, "星期一");       for(Iterator<Entry<TestEnum, String>> iter = weekMap.entrySet().iterator(); iter.hashNext();){        Entry<TestEnum, String> entry = iter.next();        System.out.println(entry.getKey().name + entry.getValue());    }    }

总结

实际上可以吧enum看做一个普通的class类,他们都可以定义自己的属性和方法,不同之处在于enum不可以继承,因为java是单继承,已经继承了java.lang.Enum.

原创粉丝点击