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); } }