Java 枚举

在 Java 中,枚举(enum,是 enumeration 的缩写)是一种具有固定常量集合的类型。我们使用 enum 关键字来声明枚举。例如,

enum Size { 
   SMALL, MEDIUM, LARGE, EXTRALARGE 
}

在这里,我们创建了一个名为 Size 的枚举。它包含固定的值 SMALLMEDIUMLARGEEXTRALARGE

花括号内的这些值称为枚举常量(值)。

注意:枚举常量通常用大写字母表示。


示例 1:Java 枚举

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Main {
   public static void main(String[] args) {
      System.out.println(Size.SMALL);
      System.out.println(Size.MEDIUM);
   }
}

输出

SMALL
MEDIUM

从上面的示例可以看出,我们使用枚举名称来访问常量值。

此外,我们还可以创建枚举类型的变量。例如,

Size pizzaSize;

在这里,pizzaSizeSize 类型的变量。它只能被赋予 4 个值。

pizzaSize = Size.SMALL;
pizzaSize = Size.MEDIUM;
pizzaSize = Size.LARGE;
pizzaSize = Size.EXTRALARGE;

示例 2:带 switch 语句的 Java 枚举

enum Size {
 SMALL, MEDIUM, LARGE, EXTRALARGE
}

class Test {
 Size pizzaSize;
 public Test(Size pizzaSize) {
   this.pizzaSize = pizzaSize;
 }
 public void orderPizza() {
   switch(pizzaSize) {
     case SMALL:
       System.out.println("I ordered a small size pizza.");
       break;
     case MEDIUM:
       System.out.println("I ordered a medium size pizza.");
       break;
     default:
       System.out.println("I don't know which one to order.");
       break;
   }
 }
}

class Main {
 public static void main(String[] args) {
   Test t1 = new Test(Size.MEDIUM);
   t1.orderPizza();
 }
}

输出

I ordered a medium size pizza.

在上面的程序中,我们创建了一个 Size 枚举类型。然后我们声明了一个 Size 类型的变量 pizzaSize

在这里,变量 pizzaSize 只能被赋予 4 个值(SMALLMEDIUMLARGEEXTRALARGE)。

请注意以下语句:

Test t1 = new Test(Size.MEDIUM);

它将调用 Test 类中的 Test() 构造函数。现在,变量 pizzaSize 被赋予了 MEDIUM 常量。

根据值,将执行 switch case 语句的一个 case。


Java 中的枚举类

在 Java 中,枚举类型被认为是类的一种特殊类型。它是在 Java 5 发布时引入的。

枚举类可以像普通类一样包含方法和字段。

enum Size {
    constant1, constant2, …, constantN;

    // methods and fields	
}

当我们创建枚举类时,编译器将为每个枚举常量创建实例(对象)。此外,所有枚举常量默认都是 public static final


示例 3:Java 枚举类

enum Size{
  SMALL, MEDIUM, LARGE, EXTRALARGE;

  public String getSize() {

    // this will refer to the object SMALL
    switch(this) {
      case SMALL:
        return "small";

      case MEDIUM:
        return "medium";

      case LARGE:
        return "large";

      case EXTRALARGE:
        return "extra large";

      default:
        return null;
      }
   }

  public static void main(String[] args) {

    // call getSize()
    // using the object SMALL
    System.out.println("The size of the pizza is " + Size.SMALL.getSize());
  }
}

输出

The size of the pizza is small

在上面的示例中,我们创建了一个 Size 枚举类。它有四个常量 SMALLMEDIUMLARGEEXTRALARGE

由于 Size 是一个枚举类,编译器会自动为每个枚举常量创建实例。

在这里,在 main() 方法中,我们使用实例 SMALL 调用了 getSize() 方法。

注意:与普通类一样,枚举类也可以包含构造函数。要了解更多信息,请访问Java 枚举构造函数


Java 枚举类的方法

枚举类中有一些预定义的方法可以立即使用。

1. Java 枚举 ordinal()

ordinal() 方法返回枚举常量的位置。例如,

ordinal(SMALL) 
// returns 0

2. 枚举 compareTo()

compareTo() 方法根据其序数值比较枚举常量。例如,

Size.SMALL.compareTo(Size.MEDIUM)
 // returns ordinal(SMALL) - ordinal(MEDIUM)

3. 枚举 toString()

toString() 方法返回枚举常量的字符串表示形式。例如,

SMALL.toString()
// returns "SMALL"

4. 枚举 name()

name() 方法以字符串形式返回枚举常量的定义名称。name() 方法的返回值是 final 的。例如,

name(SMALL)
// returns "SMALL"

5. Java 枚举 valueOf()

valueOf() 方法接受一个字符串并返回具有相同字符串名称的枚举常量。例如,

Size.valueOf("SMALL")
// returns constant SMALL.

6. 枚举 values()

values() 方法返回一个包含所有枚举常量的枚举类型数组。例如,

Size[] enumArray = Size.value();

为什么使用 Java 枚举?

在 Java 中,引入枚举是为了取代 int 常量的使用

假设我们使用了一组 int 常量。

class Size {
   public final static int SMALL = 1;
   public final static int MEDIUM = 2;
   public final static int LARGE = 3;
   public final static int EXTRALARGE = 4;
}

这里,如果打印常量,就会出现问题。这是因为只打印了数字,这可能没有帮助。

因此,我们可以使用枚举而不是 int 常量。例如,

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

这使得我们的代码更具可读性。

此外,枚举提供了编译时类型安全

如果我们声明一个 Size 类型的变量。例如,

Size size;

在这里,可以保证该变量将保存这四个值之一。现在,如果我们尝试传递这四个值以外的其他值,编译器将生成一个错误。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战