Java 枚举学习笔记
什么是枚举?
Java 枚举是一种特殊的数据类型,用于表示固定数量的常量。枚举常量在程序运行期间保持不变,并且可以很方便地进行比较和排序。
如何定义枚举?
在 Java 中,定义枚举需要使用关键字 enum
。下面是一个简单的枚举定义示例:
javaCopy Codeenum Fruit {
APPLE,
BANANA,
ORANGE
}
在上面的示例中,Fruit
是一个枚举类型,其值包括 APPLE
、BANANA
、ORANGE
三个常量。
如何使用枚举?
基本用法
可以使用枚举常量来赋值和比较,例如:
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 Codeenum 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 Codeenum 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);
}
}
在上面的代码中,首先定义了两个枚举类型 Suit
和 Rank
,用于表示扑克牌的花色和点数。然后定义了一个 Card
类,该类包含一个花色和一个点数,并实现了 Comparable
接口以便进行比较和排序。最后在 main
方法中,使用枚举常量生成一副扑克牌,对其进行洗牌和排序,并输出结果。