java中enum的用法总结

一、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("MON", 0);
new Enum("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;
        }
    }
}
输出结果:
MON
TUE
WED
THU
FRI
SAT
SUN

—————-我是分隔线——————
今天是星期二
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.EnumTest
name(): TUE
toString(): TUE
ordinal(): 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 weekSet = Enum.allOf(TestEnum.class);
    for(TestEnum day : weekSet){
        System.out.println(day);
    }
        // EnumMap的使用
        EnumMap weekMap = new EnumMap(TestEnum.class);
        weekMap.put(TestEnum.MON, "星期一");
       for(Iterator> iter = weekMap.entrySet().iterator(); iter.hashNext();){
        Entry entry = iter.next();
        System.out.println(entry.getKey().name + entry.getValue());
    }
    }

总结

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

你可能感兴趣的:(JAVA)