JCF之Enum
【摘要】JCF之Enum[枚举]~
前言
hi~
枚举 [enum]
JDK5.0开始有了枚举类型,它也是一种数据类型,是一种值类型。
它的目的是为了提供 “类型安全的常量”。
没有枚举之前,表达学员类型的性别:
1 | public class Student { |
我们如何才能做到让Student的gender属性和status属性的值只能从固定好的几个值中进行选择?
答案:利用枚举。
如:
1 | public enum Gender { |
它的特点:
1.构造方法是私有的
2.每一个枚举常量值都是一个公开、静态、类本身的常量实例
3.自动继承于java.lang.Enum类
语法:
1 | public enum 枚举名 { |
如:
1 | public enum Season { |
枚举类中也可以有抽象方法
但是要注意:
因为有抽象方法,则这个枚举从语法上来看,它属于抽象类。
它就不能被实例化,这样一来,它的所有枚举常量就是非法的。
所以,只能通过匿名内部类来实例化每一个枚举常量,并实现抽象方法。
如:
1 | public enum Hehe { |
有关枚举的集合
java.util.EnumMap
java.util.EnumSet
作业
编写一个模拟扑克牌中的洗牌、发牌的业务,包含如下类型
- 开发两个枚举类型 如果要考虑大小王,则再提供一个枚举
1
2
3
4
5
6public enum 花色 {
//黑、红、梅、方
}
public enum 点数 {
//...从A至K
}1
2
3public enum Joker {
//大、小
} - 开发一个卡片类 [Card], 由 花色、点数
1
2
3
4
5public class Card {
private 花色 花色;
private 点数 点数;
private 王牌 王牌;
} - 开发一个扑克牌类 [Poker], 它由 52/54张卡片组成
1
2
3
4
5
6public class Poker {
//属性
private String vendor; //
private List<Card> cards; //这个属性很关键
//...
} - 再写一个类,针对Poker的业务类
1
2
3
4
5public class PokerService { //有强大需求的可以定义接口
//洗牌方法...
//发牌方法... [玩家数,每人发几张]
此方法把每个玩家的牌给打印出来..
}结束语
bye~