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