枚举
JDK1.5引入了新的类型——枚举。
在JDK1.5 之前,定义常量的方式: public static fianl.... 。
而枚举,可以把相关的常量分组到一个枚举类型里,提供了比常量更多的方法。
可以借助单例来理解枚举,枚举就是多个实例。
枚举:定义了一组有限数量的相关常量的类,即枚举类,其中的常量称为枚举项。
定义枚举类的关键字是 enum
定义格式
权限修饰符 enum 枚举名称 { 实例1, 实例2,实例3,实例4; }
示例
public enum Season { // 枚举项(Season的实例),逗号分隔,最后分号结束 SPRING, SUMMER, AUTUMN, WINTER; } // 获取:类名.枚举项 Season s = Season.SPRING;
public enum Season { SPRING(3), SUMMER(6), AUTUMN(9), WINTER(11); private int seasonValue; // 私有构造函数 private Season(int seasonValue) { this.seasonValue= seasonValue; } public int getSeasonValue() { return seasonValue; } }
Enum
所有枚举类都默认是Enum类的子类
构造器
唯一的构造函数: protected Enum(String name,int ordinal)
程序员无法调用此构造函数。 它由编译器发出的代码用于响应枚举类型声明。
参数:
name - - 此枚举常量的名称,它是用于声明它的标识符。
ordinal - - 此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零)。
方法
实现接口的枚举类
// 每个枚举对象,都可以实现自己的抽象方法来实现功能 public interface SeasonColor{ void showColor(); } public enum Season implements SeasonColor{ SPRING(3){ @Override public void showColor(){ //... } }, SUMMER(6){ @Override public void showColor(){ //... } },AUTUMN(9){ @Override public void showColor(){ //... } },WINTER(11){ @Override public void showColor(){ //... } }; }
抽象方法
public enum Season { SPRING(3){ public void showColor(){ System.out.println("red"); } }, SUMMER(6){ public void showColor(){ System.out.println("green"); } },AUTUMN(9){ public void showColor(){ System.out.println("yellow"); } },WINTER(11){ public void showColor(){ System.out.println("white"); } }; public abstract void showColor(); private int seasonValue; Season(int seasonValue) { this.seasonValue= seasonValue; } public int getSeasonValue() { return seasonValue; } }
枚举类型在switch中使用
Season s = Season.SPRING; switch(s) { case SPRING: System.out.println("春");break; case SUMMER:System.out.println("夏");break; case AUTUMN: System.out.println("秋");break; case WINTER: System.out.println("冬");break; default:System.out.println("不存在的季节"); }
注意事项
一旦定义了枚举,最好不要妄图修改里面的值,除非修改是必要的。
枚举类默认继承的是java.lang.Enum类而不是Object类
枚举类不能有子类,因为其枚举类默认被final修饰
只能有private构造方法
switch中使用枚举时,直接使用常量名,不用携带类名
不能定义name属性,因为自带name属性
不要为枚举类中的属性提供set方法,不符合枚举最初设计初衷。
posted on
浙公网安备 33010602011771号