1,定义:枚举是一个具有特定值的类型,对于用户来说只能任取其一,对于面向对象来说时是一个类的对象已经创建好,用户不能新生枚举对象,只能选择一个已经生成好的对象。
2,枚举本质上也是一个类,一个final类,类不能被继承,且构造方法必须私有,一个枚举值是一个公共静态常量,也是这个类的一个对象。
在没有出现enum时的自定义枚举类:
1,
View Code
public class Season {
public static final int SPRING=0;
public static final int SUMMER=1;
public static final int AUTUMN=2;
public static final int WINTER=3;
}
这样写时在调用的时候
View Code
public void show(int t){
if(t==Season.SPRING){
...
}
}
传递的传说可以是0,1,2,3也可以是别的数值,而程序没有匹配的值,也不会报错,数据也不安全。
2,接着出现了一种类型安全的枚举类:
View Code
public final class Season {
public static final Season SPRING = new Season();
public static final Season SUMMER = new Season();
public static final Season AUTUMN = new Season();
public static final Season WINTER = new Season();
private Season() {
}
}
用private构造方法,不让用户自己new出对象。
3,枚举其实就是类型安全的枚举类,可以有属性,方法。
View Code
public enum Season {
SPRING, SUMMER, AUTUMN, WINTER,
}
枚举继承自java.lang.Enum,枚举值相当于Season类型的静态常量。
4
View Code
public enum Season {
SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬");
private String name;
Season(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
Season s=Season.SPRING;由于不能new,只能调用类内静态常量。