614 次浏览
  • 优点:类型安全,业务明确
  • 格式
    public enum Weekday {
        MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATUERDAY,SUNDAY;
    }
    public enum Gender {
        //枚举值调用对应构造器创建
        MALE("男")
        {
            public void info() {
                System.out.println("这个枚举值代表男性");
            }
        },
        FEMALE("女")
        {
            public void info() {
                System.out.println("这个枚举值代表女性");
            }
        };
        private final String name;
        private Gender(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public void info() {
            System.out.println("这是一个定义性别的枚举类");
        }
    }
    public static void main(String args[]) {
        System.out.println(Gender.MALE);//MALE
        System.out.println(Gender.MALE.getName());//男
      Gender.MALE.info();//这个枚举值代表男性
    }
    
  • 特点
    • 可以定义构造器,成员变量,普通方法和抽象方法
    • 隐式继承了java.lang.Enum类,但不能显式继承其他父类
    • 默认构造器使用private修饰,一旦枚举类显式定义了带参数化的构造器,累出枚举值时就必须对应传入参数
    • 枚举类所有实例必须在枚举类第一行显式列出,列出实例时,系统默认用public static final修饰,枚举类列举后以;作为结束,
    • 枚举类后{},该枚举类实例时枚举类匿名内部子类的对象
    • 实现了Comparable接口–可比较
    • 实现了Serializable接口–可序列化
  • 使用
    • 使用该枚举类的某个实例:EnumClass.variable
    • Weekday day = Weekday.SATURDAY;
    • 枚举类S.values()//遍历枚举常量列表
    • 枚举常量s.ordinal()//返回从0开始的int值–枚举实例的声明顺序
    • 枚举实例s.getDeclaringClass()//得到枚举实例所属的外部包装类
    • s.name()//枚举实例被声明的名称 <=> toString()
    • Enum.valueOf(S.class,s)//根据传入的String (s) 匹配枚举实例,不存在则抛出异常
  • Enum 类中的实例方法用法:
    • String name();返回该枚举实例的常量名
    • int ordinal();返回该枚举值在枚举类中的索引,从0开始
    • String toString();返回该枚举实例的常量名
    • boolean equals();当制定对象等于此枚举常量时,返回true;
    • 枚举类默认提供的类方法(从反编译代码)
      //枚举类型[] values() 返回该枚举类所有枚举对象组成的数组
      Weekday[] ws = Weekday.values();
      //枚举类型 valueOf(String name):返回名称为name的枚举对象
      Weekday day = Weekday.valueOf("MONDY");
  • switch 也支持操作枚举类型
    • switch 的控制表达式可以是枚举类型变量,case表达式中的值直接使用枚举类的名字,无需添加枚举类作为限定
    • 底层调用枚举对象的ordinal()方法该方法返回值类型时int
  • 枚举类可做单例模式

参考:Java笔记-18枚举类

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注