Java中关于枚举类型

关于JAVA中枚举类型,通过详细的例子以及注释来详细说明,具体请看下面代码,注意别着急仔细看注释以及每部的执行结果,结果即每一行的末尾注释,直接粘代码了。

package com.zerah.test03;

/**
 * @program: JavaExercise
 * @author: Mr.Zerah
 * @create: 2018-10-16 23:30
 * @description: 枚举测试
 **/
enum SizeEnum {
    SMALL, MEDIUM, LARGE
}

public class EnumTest {
    public static void main(String[] args) {

        SizeEnum size = SizeEnum.MEDIUM;
        /*--------------toString/name-----------------*/
        System.out.println(size.toString());        //返回其字面值
        System.out.println(size.name());            //同toString作用一样
        /*--------------equals/==-----------------*/
        SizeEnum common = SizeEnum.SMALL;
        System.out.println(common == SizeEnum.SMALL);                //true
        System.out.println(common.equals(SizeEnum.SMALL) && SizeEnum.SMALL.equals(common)); //true
        System.out.println(common == SizeEnum.MEDIUM);   //false
        System.out.println(common.equals(size));        //false
        /*-----------------枚举值的顺序------------------------*/
        //MEDIUM声明的位置为:1SMALL声明的位置为:0       ,即默认从0开始
        System.out.println("MEDIUM声明的位置为:" + size.ordinal() + "SMALL声明的位置为:" + common.ordinal());     //MEDIUM声明的位置为:1SMALL声明的位置为:0
        /*-----------------枚举类型都实现了Comparable接口------------------------*/
        //比较其实是比较的ordinal的大小,即声明的位置先后,例如SMALL小于MEDIUM即返回-1
        System.out.println(common.compareTo(size));     //-1
        /*-----------------枚举用于switch------------------------*/
        onChosen(size);         //chose Medium !!!
        /*-----------------枚举valUeOf(String);方法,返回字符串对应的枚举类型-----------------------*/
        System.out.println(SizeEnum.valueOf("SMALL"));  //此处必须大小写对应   SMALL
        //System.out.println(SizeEnum.valueOf("small"));  //  否则会报没有此枚举常量的异常  java.lang.IllegalArgumentException: No enum constant
        /*-----------------枚举values方法,返回一个包括所有枚举值的数组,顺序与声明时一致-----------------------*/
        for (SizeEnum every:SizeEnum.values()) {
            System.out.print(every+"、");        //SMALL、MEDIUM、LARGE、
        }

    }

    static void onChosen(SizeEnum chose) {
        switch (chose) {
            case SMALL:         //switch 语句内部,枚举值不能带枚举类型前缀,即不能使用Size.SMALL而直接使用SMALL
                System.out.println("chose Small !!!");
                break;
            case MEDIUM:
                System.out.println("chose Medium !!!");
                break;
            case LARGE:
                System.out.println("chose Large !!!");
                break;
        }
    }

}

那么为什么要定义枚举类呢?在java 5之前一般是在类中定义静态整型变量来实现类似功能,代码如下:

class SizeEnum{
    public static final int SMALL =0;
    public static final int MEDIUM=1;
    public static final int LARGE =2;
}

采用了枚举之后有如下好处:

定义枚举的语法更为简洁

枚举更为安全,一个枚举类型的变量,他的值要么为null,要么为枚举值之一,不可能是其他值,但使用其他类型的变量,他的值就没有办法强制,值可能就是无效的

枚举类型自带很多便利的方法(values,valueOf,toString等等),易于使用

本文参考《java 编程的逻辑》,P120

你可能感兴趣的:(Java基础)