类的对象只有有限个 确定的 如
    星期:星期一、星期二…..
    性别:男、女
    季节:春
    支付方式:现金、支付宝…
    订单状态:未付款、已付款、已发货、已取消…

    当需要定义一组常量时,强烈建议使用枚举类

    1. 自定义枚举类
    2. 使用关键字enum定义枚举类
    3. enum关键字定义的枚举类顶级父类不是Object
    4. enum关键字枚举类顶级父类 class java.lang.Enum
    5. 枚举类可以实现接口

    一、自定义枚举类

    1. /**
    2. * @author:LYY 创建时间:2022/5/4
    3. * jkd5.0之前
    4. * 自定义枚举类
    5. */
    6. public class Season {
    7. // 1. 属性需要声明为私有不可变的
    8. private final String name;
    9. private final String doc;
    10. // 2. 私有化构造器
    11. private Season(String name,String doc) {
    12. this.name = name;
    13. this.doc = doc;
    14. }
    15. // 3. 提供枚举类的多个对象 对象为静态不可变的
    16. public static final Season SPRING = new Season("春天", "春暖花开");
    17. public static final Season SUMMER = new Season("夏天", "烈日炎炎");
    18. public static final Season AUTUMN = new Season("秋天", "秋高气爽");
    19. public static final Season WINTER = new Season("冬天", "白雪皑皑");
    20. // 提供枚举类对象属性的访问
    21. public String getName() {
    22. return name;
    23. }
    24. public String getDoc() {
    25. return doc;
    26. }
    27. @Override
    28. public String toString() {
    29. return "Season{" +
    30. "name='" + name + '\'' +
    31. ", doc='" + doc + '\'' +
    32. '}';
    33. }
    34. }
    35. class SeasonTest{
    36. public static void main(String[] args) {
    37. System.out.println("Season.SPRING = " + Season.SPRING);
    38. }
    39. }

    二、使用enum关键字定义枚举类

    1. /**
    2. * @author:LYY
    3. * 创建时间:2022/5/4
    4. * 枚举类也可以实现接口
    5. * 重写接口方法
    6. * enum关键字定义的枚举类父类不是Object
    7. */
    8. enum Season{
    9. // 一定要将枚举对象放在最上方
    10. SPRING("春天", "春暖花开"),
    11. SUMMER("夏天", "烈日炎炎");
    12. // 属性继续保持私有不可变修饰符
    13. private final String name;
    14. private final String doc;
    15. // 私有构造器
    16. private Season(String name, String doc){
    17. this.name = name;
    18. this.doc = doc;
    19. }
    20. }

    三、枚举类常用方法

    1. /**
    2. * @author:LYY 创建时间:2022/5/4
    3. */
    4. public class JavaTest {
    5. public static void main(String[] args) {
    6. // toString 打印当前枚举对象的常量名称
    7. System.out.println("Season.SPRING.toString() = " + Season.SPRING.toString());
    8. // values 返回当前枚举类的对象(常量)
    9. Season[] values = Season.values();
    10. for (int i = 0; i < values.length; i++) {
    11. System.out.println("values = " + values[i]);
    12. }
    13. // 传递枚举常量名称 返回与名称匹配的枚举常量
    14. Season summer = Season.valueOf("SUMMER");
    15. System.out.println("summer = " + summer);
    16. }
    17. }