Java - 枚舉:初學者指南
哈囉,有志於成為Java程序設計師的你!今天,我們將要深入Java枚舉的奇妙世界。如果你以前從未聽過它們,也別擔心 - 當你完成這個教學後,你將成為枚舉的專家!所以,拿起你最喜歡的飲料,我們開始吧!
枚舉介紹
你是否曾處於這樣的情境:在代碼中需要表示一組固定的常量?也許你正在為一家咖啡店創建程序,並需要表示不同尺寸的咖啡杯。或者也許你正在建造一個遊戲,並需要表示角色可以移動的不同方向。這就是枚舉拯救的地方!
枚舉(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)
讓我們解析一下這個例子中發生了什麼:
- 我們創建了一個
CoffeeSize
變量mySize
,並將其設置為MEDIUM
。 - 我們使用
getDescription()
方法打印mySize
的描述。 - 我們打印
MEDIUM
的序數值,該值為1(記住,序數值從0開始)。 - 我們使用for-each循環遍歷所有
CoffeeSize
值,並打印它們的描述。 - 最後,我們演示了使用
valueOf()
根據其名稱獲取LARGE
枚舉常量的用法。
就是這樣!你剛剛走進了Java枚舉的世界。它們是表示固定常量集的強大工具,以類型安全的方式。
記住,枚舉不僅僅是華麗的常量。它們可以擁有構造器、字段和方法,使它們非常多才多藝。它們是表示如星期天、紙牌花色、披薩尺寸或程序中的任何其他固定值集的完美選擇。
隨著你在Java之旅中的進行,你將找到枚舉的許多更多用途。它們是Java語言的基本部分,掌握它們將使你成為一個更有效率和有效的程序設計師。
繼續練習,繼續編碼,最重要的是,繼續享受學習的過程。在你知道之前,你將能夠輕鬆編寫複雜的Java程序。編程愉快!
Credits: Image by storyset