Java - 枚舉:初學者指南

哈囉,有志於成為Java程序設計師的你!今天,我們將要深入Java枚舉的奇妙世界。如果你以前從未聽過它們,也別擔心 - 當你完成這個教學後,你將成為枚舉的專家!所以,拿起你最喜歡的飲料,我們開始吧!

Java - Enums

枚舉介紹

你是否曾處於這樣的情境:在代碼中需要表示一組固定的常量?也許你正在為一家咖啡店創建程序,並需要表示不同尺寸的咖啡杯。或者也許你正在建造一個遊戲,並需要表示角色可以移動的不同方向。這就是枚舉拯救的地方!

枚舉(Enum),是“列舉”的縮寫,是Java中一種特殊的類型,代表一組常量(不可變變量,如final變量)。將其視為一種花哨的方式,用於創建一組預定義的、不會更改的值。

類聲明

我們先來看看如何聲明枚舉。其語法非常簡單:

enum CoffeeSize {
SMALL,
MEDIUM,
LARGE
}

在這個例子中,我們創建了一個名為CoffeeSize的枚舉,其中有三個常量:SMALL、MEDIUM和LARGE。注意我們是如何使用enum關鍵字而不是class,以及每個常量是如何用逗號分隔的。

類構造器

枚舉可以有構造器,就像普通類一樣。這允許我們將額外的數據與每個枚舉常量關聯起來。讓我們擴展我們的CoffeeSize例子:

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}
}

在這個更新版本中,我們添加了一個構造器,該構造器接受一個表示每個尺寸的盎司數的int參數。我們還添加了一個私有字段ounces和一個獲取器方法getOunces()

類方法

枚舉可以像普通類一樣擁有方法。讓我們在我們的CoffeeSize枚舉中添加一個方法:

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " coffee (" + this.ounces + " oz)";
}
}

我們添加了一個getDescription()方法,該方法返回描述咖啡尺寸的字符串。name()方法從Enum類繼承而來,並返回常量的名稱作為字符串。

繼承的方法

所有枚舉默認繼承自java.lang.Enum。這意味著它們帶有一些內置的方法。這裡有一些最常用的:

方法 描述
name() 返回枚舉常量的名稱
ordinal() 返回枚舉常量的位置(從0開始)
valueOf(String name) 返回具有指定名稱的枚舉常量
values() 返回包含所有枚舉常量的數組

示例

現在,讓我們把所有東西放在一起,在完整的例子中:

public class CoffeeShop {
public static void main(String[] args) {
CoffeeSize mySize = CoffeeSize.MEDIUM;

System.out.println("我點了一杯 " + mySize.getDescription());
System.out.println("這個尺寸的序數值為: " + mySize.ordinal());

System.out.println("\n所有可用的尺寸:");
for (CoffeeSize size : CoffeeSize.values()) {
System.out.println(size.getDescription());
}

// 使用valueOf
CoffeeSize anotherSize = CoffeeSize.valueOf("LARGE");
System.out.println("\n使用valueOf: " + anotherSize.getDescription());
}
}

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " coffee (" + this.ounces + " oz)";
}
}

輸出

當你運行這個程序時,你將看到以下輸出:

我點了一杯 MEDIUM coffee (12 oz)
這個尺寸的序數值為: 1

所有可用的尺寸:
SMALL coffee (8 oz)
MEDIUM coffee (12 oz)
LARGE coffee (16 oz)

使用valueOf: LARGE coffee (16 oz)

讓我們解析一下這個例子中發生了什麼:

  1. 我們創建了一個CoffeeSize變量mySize,並將其設置為MEDIUM
  2. 我們使用getDescription()方法打印mySize的描述。
  3. 我們打印MEDIUM的序數值,該值為1(記住,序數值從0開始)。
  4. 我們使用for-each循環遍歷所有CoffeeSize值,並打印它們的描述。
  5. 最後,我們演示了使用valueOf()根據其名稱獲取LARGE枚舉常量的用法。

就是這樣!你剛剛走進了Java枚舉的世界。它們是表示固定常量集的強大工具,以類型安全的方式。

記住,枚舉不僅僅是華麗的常量。它們可以擁有構造器、字段和方法,使它們非常多才多藝。它們是表示如星期天、紙牌花色、披薩尺寸或程序中的任何其他固定值集的完美選擇。

隨著你在Java之旅中的進行,你將找到枚舉的許多更多用途。它們是Java語言的基本部分,掌握它們將使你成為一個更有效率和有效的程序設計師。

繼續練習,繼續編碼,最重要的是,繼續享受學習的過程。在你知道之前,你將能夠輕鬆編寫複雜的Java程序。編程愉快!

Credits: Image by storyset