枚举

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 2021-04-04 18:20  一计  阅读(101)  评论(0)    收藏  举报