枚举类Enum

1、概述

枚举(enum)是一种特殊的类,是 JDK 1.5 中引入的新特性,用于表示一组固定的常量。枚举使得代码更加清晰、类型安全且易于维护。

1.1 未使用枚举时定义一组常量的缺点

1.2 使用枚举的优点

可以将常量组织起来,统一进行管理。使得代码更加清晰、类型安全且易于维护。

1.3 枚举类型的本质

一种受限制的类,不能继承,并且具有自己的方法。创建enum时,编译器会为你生成一个相关的类,这个类继承自 java.lang.Enum。

1.4 枚举类的特点

  • 1)、枚举类不能实例化,构造方法访问权限是私有的,否则不会通过编译。
  • 2)、枚举类不能继承其他类或枚举,也不能被继承,但是可以实现接口。
  • 3)、枚举类不能作为数据类型(如方法参数)。
  • 4)、枚举类可以声明抽象方法,每一个枚举常量都要实现该抽象方法。

2、枚举类的基本定义

使用 enum 关键字定义一个枚举类,类中可以包含字段、方法以及构造函数。

2.1 语法格式:访问修饰符 enum 枚举类型名称 {枚举值1, 枚举值2, ···; 枚举类中的方法}

  • 1)、基础枚举类:
    public enum Day {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
    }
  • 2)、 包含字段、方法和构造函数的枚举类:
    public enum WeekDay {
        MONDAY("Monday", "星期一"),
        TUESDAY("Tuesday", "星期二"),
        WEDNESDAY("Wednesday", "星期三"),
        THURSDAY("Thursday", "星期四"),
        FRIDAY("Friday", "星期五"),
        SATURDAY("Saturday", "星期六"),
        SUNDAY("Sunday", "星期日");
    
        private String code;
        private String value;
    
        WeekDay(String code, String value) {
            this.code = code;
            this.value = value;
        }
    
        public String getCode() {
            return code;
        }
    
        public void setCode(String code) {
            this.code = code;
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    }
    

2.2 枚举类的构造函数

        枚举的构造方法访问权限是私有的,否则不会通过编译,防止外部创建枚举实例。每个枚举常量在声明时,实际上是调用了这个私有构造函数。

2.3 枚举类的使用

与使用普通类一样使用枚举类。可以遍历枚举常量、访问枚举字段和方法。

// 基本使用
WeekDay monday = WeekDay.MONDAY;
System.out.println(monday instanceof Enum); // 输出true
System.out.println(monday); // 输出MONDAY
System.out.println(monday.getCode() + "-" + monday.getValue()); // 输出MONDAY-星期一

3、枚举类的内置方法

3.1 枚举类的方法:通过枚举类.方法名()进行调用。

  • 1)、values():返回包含所有枚举常量的数组。
  • 2)、valueOf(String name):将字符串转换为对应的枚举常量。若字符串与枚举常量名称不匹配,转换失败会报IllegalArgumentException异常。
// 枚举类方法
// 1)、values(): 返回包含所有枚举常量的数组。
WeekDay[] values = WeekDay.values();
Arrays.stream(values).forEach(item -> System.out.printf(item.getValue() + " ")); // 输出星期一 星期二 星期三 星期四 星期五 星期六 星期日
// 2)、valueOf(String name): 将字符串转换为对应的枚举常量。
WeekDay sunDay1 = WeekDay.valueOf("SUNDAY");
System.out.println(sunDay1); // 输出SUNDAY
WeekDay sunDay2 = WeekDay.valueOf("SunDay");
System.out.println(sunDay2); // 转换失败,抛出异常IllegalArgumentException

3.2 枚举常量的方法:通过枚举常量.方法名进行调用。

  • 1)、final String name(): 返回枚举常量的名称。
  • 2)、int ordinal():返回枚举常量在声明中的位置(从0开始)。
  • 3)、String toString():返回枚举常量的名称,通常与 name() 方法相同。
  • 4)、final i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值