Java 枚举(enum)

Java 枚举 (enum) 是一种特殊的类,代表一组常量。它通常用于表示一组固定的值,如星期、月份、状态、类型等。通过使用枚举,可以提高代码的可读性和安全性,因为它限制了变量可以取的值。本文主要介绍Java 枚举(enum) 。

1、枚举(enum) 

enum是一个特殊的类,代表一组常量(不可更改的变量,如,final变量)。

要创建enum,请使用enum关键字(而不是类或接口),并用逗号分隔常量。请注意,它们应使用大写字母:

例如:

访问enum中常量可以使用.的方式访问:

enum Level {
  LOW,
  MEDIUM,
  HIGH
}

如访问枚举类型LevelLOW则使用Level.LOW

2、类中定义枚举

还可以在类中包含一个enum

例如:

public class Main {
  enum Level {
    LOW,
    MEDIUM,
    HIGH
  }

  public static void main(String[] args) {
    Level myVar = Level.MEDIUM; 
    System.out.println(myVar);
  }
}

3、switch语句中的enum

枚举常用于switch语句中,来判断相应的值:

例如:

public class Main {
  public static void main(String[] args) {
    Level myVar = Level.MEDIUM;

    switch(myVar) {
      case LOW:
        System.out.println("Low level");
        break;
      case MEDIUM:
         System.out.println("Medium level");
        break;
      case HIGH:
        System.out.println("High level");
        break;
    }
  }
}
enum Level {
  LOW,
  MEDIUM,
  HIGH
}

4、循环遍历枚举类型 

枚举类型具有values()方法,该方法返回所有枚举常量的数组。 当要遍历枚举的常量时,此方法很有用:

例如:

for(Level myVar : Level.values()){
  System.out.println(myVar);
}

5、枚举的values(), ordinal() 和 valueOf() 方法

enum 定义的枚举类默认继承了java.lang.Enum 类,并实现了 java.lang.Seriablizable java.lang.Comparable 两个接口。

values(), ordinal()valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。

1)给枚举添加字段和方法

可以在枚举中添加字段和方法,使其更加灵活。

public class Main {
    public static void main(String[] args) {
        // 输出: 2
        System.out.println(Day.MONDAY.getDayNumber());  
    }
}

enum Day {
    SUNDAY(1), MONDAY(2), TUESDAY(3), WEDNESDAY(4),
     THURSDAY(5), FRIDAY(6), SATURDAY(7);
private int dayNumber; Day(int dayNumber) { this.dayNumber = dayNumber; } public int getDayNumber() { return this.dayNumber; } }

2)使用枚举进行比较

枚举常量可以使用 == 来比较。

import java.time.DayOfWeek;

public class DayExample {
    public static void main(String[] args) {
        // 可以替换为其他天,例如 DayOfWeek.TUESDAY
        DayOfWeek today = DayOfWeek.MONDAY;

        if (today == DayOfWeek.MONDAY) {
            System.out.println("Today is Monday");
        } else {
            System.out.println("Today is not Monday");
        }
    }
}

6、枚举与类之间的区别

枚举可以像class一样具有属性和方法。唯一的区别是枚举常量是不可更改,不能用于创建对象,并且不能扩展其他类(但可以实现接口)。

推荐阅读
cjavapy编程之路首页