跳到主要内容

Java 枚举

提示
  1. 枚举的基本概念:Java中的枚举是一种特殊的类类型,用于定义固定常量值集合,通过enum关键字声明。
  2. 枚举与switch语句的结合:枚举可以与switch语句结合使用,提供了一种有效的方式来处理一组固定的选项。
  3. 枚举的优势和功能:枚举提供了类型安全和更直观的代码,还支持包含方法和字段,以及一些预定义的方法如ordinal()compareTo()toString()name()valueOf()values()

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

enum Size {
SMALL, MEDIUM, LARGE, EXTRALARGE
}

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

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

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

示例 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 个值(SMALL, MEDIUM, LARGE, EXTRALARGE)。

注意这个语句,

Test t1 = new Test(Size.MEDIUM);

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

根据值的不同,switch case 语句中的一个案例将被执行。

Java 中的枚举类

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

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

enum Size {
constant1, constant2,, constantN;

// 方法和字段
}

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

示例 3:Java 枚举类

enum Size{
SMALL, MEDIUM, LARGE, EXTRALARGE;

public String getSize() {

// 这将引用对象 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) {

// 调用 getSize()
// 使用

对象 SMALL
System.out.println("The size of the pizza is " + Size.SMALL.getSize());
}
}

输出

披萨的大小是小号

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

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

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

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

Java 枚举类的方法

枚举类中有一些预定义的方法,可以直接使用。

1. Java 枚举的 ordinal() 方法

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

ordinal(SMALL)
// 返回 0

2. 枚举的 compareTo() 方法

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

Size.SMALL.compareTo(Size.MEDIUM)
// 返回 ordinal(SMALL) - ordinal(MEDIUM)

3. 枚举的 toString() 方法

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

SMALL.toString()
// 返回 "SMALL"

4. 枚举的 name() 方法

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

name(SMALL)
// 返回 "SMALL"

5. Java 枚举的 valueOf() 方法

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

Size.valueOf("SMALL")
// 返回常量 SMALL。

6. 枚举的 values() 方法

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

Size[] enumArray = Size.values();

为什么使用 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;

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