1. 特点

  (1)enum 与 class、interface 具有相同地位,使用 enum 定义,默认使用 final 修饰,因此不能派生子类;

  (2)默认继承 java.lang.Enum 类,所以不能继承其他父类;其中 java.lang.Enum 类实现了 java.lang.Serializable 和 java.lang.Comparable 接口;可以实现一个或多个接口;

  (3)可以拥有构造器、成员方法、成员变量,构造器默认使用 private 修饰,且只能使用 private 修饰,成员变量默认使用public static final 修饰;

  (4)枚举类所有实例必须在第一行给出,否则无法产生实例;多个枚举变量直接用逗号隔开,最后一个用分号;枚举变量最好大写,多个单词之间使用”_”隔开(比如:INT_SUM);在其他类中使用enum变量的时候,只需要【类名.变量名】就可以了,和使用静态变量一样。

2. 枚举变量的方法

  (1)Weekday.valueOf() 方法:

它的作用是传来一个字符串,然后将它转变为对应的枚举变量。前提是你传的字符串和定义枚举变量的字符串一抹一样,区分大小写。如果你传了一个不存在的字符串,那么会抛出异常。

  (2)Weekday.values()方法。

这个方法会返回包括所有枚举变量的数组。在该例中,返回的就是包含了七个星期的Weekday[]。可以方便的用来做循环。

  (3)枚举变量的toString()方法。

该方法直接返回枚举定义枚举变量的字符串,比如MON就返回【”MON”】。

  (4)枚举变量的.ordinal()方法。

默认请款下,枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,类似于数组的下标。而.ordinal()方法就是获取这个次序(或者说下标)

  (5)枚举类的name()方法。

它和toString()方法的返回值一样,事实上,这两个方法本来就是一样的。

3. 枚举类可以有抽象方法,抽象方法的方法体由成员变量后面的代码块实现,具体见以下代码

4. 可以使用switch case

枚举类

public enum Season {

     //由各个枚举变量后面的代码块实现抽象方法
    SPRING(1,"MON") {
        public Season nextSeason() {
            return SUMMER;
        }
    },
    SUMMER(2,"TUS") {
        public Season nextSeason() {
            return FALL;
        }
    },
    FALL(3,"WED") {
        public Season nextSeason() {
            return WINTER;
        }
    },
    WINTER(4,"THU") {
        public Season nextSeason() {
            return SPRING;
        }
    };

    private int intSeason;
    private String stringSeason;

    //构造器默认private
    Season(int intSeason,String stringSeason){
        this.intSeason=intSeason;
        this.stringSeason=stringSeason;
    }

    public int getIntSeason(){
        return this.intSeason;
    }

    public String getStringSeason(){
        return this.stringSeason;
    }

    /**
     * 抽象方法
     * @return
     */
    public abstract Season nextSeason();

    /**
     * 枚举类的switch..case
     * @param seaon
     */
    public static void judge(Season seaon){
        switch (seaon){
            case FALL:
                System.out.println(FALL.name());
            case SPRING:
                System.out.println(SPRING.name());
            case SUMMER:
                System.out.println(SUMMER.name());
            case WINTER:
                System.out.println(WINTER.name());
        }
    }
}

使用

public class SeasonTest {
    public static void main(String[] args) {
        System.out.println(Season.SPRING.nextSeason().name());
        Season.judge(Season.WINTER);
    }
}
02-12 04:04