Java 枚举学习笔记

什么是枚举?

Java 枚举是一种特殊的数据类型,用于表示固定数量的常量。枚举常量在程序运行期间保持不变,并且可以很方便地进行比较和排序。

如何定义枚举?

在 Java 中,定义枚举需要使用关键字 enum。下面是一个简单的枚举定义示例:

javaCopy Code
enum Fruit { APPLE, BANANA, ORANGE }

在上面的示例中,Fruit 是一个枚举类型,其值包括 APPLEBANANAORANGE 三个常量。

如何使用枚举?

基本用法

可以使用枚举常量来赋值和比较,例如:

javaCopy Code
// 定义一个枚举类型 enum Fruit { APPLE, BANANA, ORANGE } public class Main { public static void main(String[] args) { // 使用枚举常量赋值 Fruit fruit = Fruit.APPLE; // 比较枚举常量是否相等 if (fruit == Fruit.APPLE) { System.out.println("It's an apple."); } } }

上面的代码中,首先定义了一个枚举类型 Fruit,然后在 main 方法中使用了该枚举类型。通过赋值和比较,可以很方便地使用枚举常量。

更多用法

在实际使用中,枚举也可以拥有字段、方法和构造函数,例如:

javaCopy Code
enum Fruit { APPLE("红色"), BANANA("黄色"), ORANGE("橙色"); private String color; Fruit(String color) { this.color = color; } public String getColor() { return color; } } public class Main { public static void main(String[] args) { Fruit fruit = Fruit.APPLE; System.out.println(fruit.getColor()); // 输出:红色 } }

在上面的代码中,Fruit 枚举中定义了一个 color 字段、一个带参构造函数和一个 getColor() 方法。在 main 方法中,直接调用枚举常量的方法即可。

实例

下面是一个使用枚举的实例,它使用枚举表示一张扑克牌,并实现了比较和排序功能:

javaCopy Code
enum Suit { SPADE, HEART, DIAMOND, CLUB } enum Rank { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING } class Card implements Comparable<Card> { private Suit suit; private Rank rank; public Card(Suit suit, Rank rank) { this.suit = suit; this.rank = rank; } public Suit getSuit() { return suit; } public Rank getRank() { return rank; } @Override public int compareTo(Card other) { int suitComparison = suit.compareTo(other.suit); if (suitComparison != 0) { return suitComparison; } else { return rank.compareTo(other.rank); } } @Override public String toString() { return rank + " of " + suit + "s"; } } public class Main { public static void main(String[] args) { List<Card> deck = new ArrayList<>(); for (Suit suit : Suit.values()) { for (Rank rank : Rank.values()) { deck.add(new Card(suit, rank)); } } Collections.shuffle(deck); System.out.println("Shuffled deck: " + deck); Collections.sort(deck); System.out.println("Sorted deck: " + deck); } }

在上面的代码中,首先定义了两个枚举类型 SuitRank,用于表示扑克牌的花色和点数。然后定义了一个 Card 类,该类包含一个花色和一个点数,并实现了 Comparable 接口以便进行比较和排序。最后在 main 方法中,使用枚举常量生成一副扑克牌,对其进行洗牌和排序,并输出结果。