1 枚举类的理解
类的对象只有 有限个 确定的
当需要定义一组常量时,强烈建议使用枚举类
举例如下
- 星期:Monday(星期一)、…、Sunday(星期天)
- 性别:Man(男)、Woman(女)
- 季节:Spring(春节)…Winter(冬天)
- 支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)
- 就职状态:Busy、Free、Vocation、Dimission
- 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、Return(退货)、Checked(已确认)Fulfilled(已配货)、
- 线程状态:创建、就绪、运行、阻塞、死亡
上述如星期就作为一个类,其中的对象就是星期一,星期二等
2 枚举类的定义
2.1自定义枚举类
-
声明对象的属性,用
private final
修饰 -
私有化类的构造器,并对对象属性赋值
-
提供当前枚举类的多个对象
-
其他诉求
- 获取枚举类对象的属性 可以提供get
- toString
public class Season {
private final String seasonName;
private final String seasonDesc;
private Season(String seasonName,String seasonDesc){
this.seasonDesc=seasonDesc;
this.seasonName=seasonName;
}
public static final Season SPRING=new Season("春天","春意盎然");
public static final Season SUMMER=new Season("夏天","夏日炎炎");
public static final Season AUTUMN=new Season("秋天","秋高气爽");
public static final Season WINTER=new Season("冬天","冰天雪地");
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
@Override
public String toString() {
return "Season{" +
"seasonName='" + seasonName + '\'' +
", seasonDesc='" + seasonDesc + '\'' +
'}';
}
public static void main(String[] args) {
Season spring = Season.SPRING;
System.out.println(spring);
}
}
2.2使用enum
- 提供当前枚举类的对象,多个对象之间用“,”隔开,最后一个用分号
- 声明对象的属性,用private final
- 私有化类的构造器,并对对象属性赋值
- 提供get方法
- 不用提供toString,enum已经重写了
public enum SeasonEnum {
SPRING("春天","春风又绿江南岸"),
SUMMER("夏天","映日荷花别样红"),
AUTUMN("秋天","秋水共长天一色"),
WINTER("冬天","窗含西岭千秋雪");
private final String seasonName;
private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
}
3. Enum类的主要方法
values()方法
返回枚举类型的对象数组
public static void main(String[] args) {
SeasonEnum[] values = SeasonEnum.values();
System.out.println(Arrays.toString(values));
}
//[SPRING, SUMMER, AUTUMN, WINTER]
ValueOf(String str)
可以把一个字符串转化为对应的枚举类对象.
要求字符串必须是枚举类对象的名字
public static void main(String[] args) {
SeasonEnum SPRING = SeasonEnum.valueOf("SPRING");
System.out.println(SPRING);
}
toString
返回当前枚举类对象常量的名称
5. 实现接口的枚举类
情况一
实现接口,在enum类中实现抽象方法
import java.util.Arrays;
interface Info{
void show();
}
public enum SeasonEnum implements Info{
SPRING("春天","春风又绿江南岸"),
SUMMER("夏天","映日荷花别样红"),
AUTUMN("秋天","秋水共长天一色"),
WINTER("冬天","窗含西岭千秋雪");
private final String seasonName;
private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
public static void main(String[] args) {
SeasonEnum SPRING = SeasonEnum.valueOf("SPRING");
System.out.println(SPRING);
}
@Override
public void show() {
System.out.println("adasd");
}
}
情况二
每个对象都重写该方法
import java.util.Arrays;
interface Info{
void show();
}
public enum SeasonEnum implements Info{
SPRING("春天","春风又绿江南岸"){
@Override
public void show() {
}
},
SUMMER("夏天","映日荷花别样红") {
@Override
public void show() {
}
},
AUTUMN("秋天","秋水共长天一色") {
@Override
public void show() {
}
},
WINTER("冬天","窗含西岭千秋雪") {
@Override
public void show() {
}
};
private final String seasonName;
private final String seasonDesc;
private SeasonEnum(String seasonName, String seasonDesc) {
this.seasonName = seasonName;
this.seasonDesc = seasonDesc;
}
public String getSeasonName() {
return seasonName;
}
public String getSeasonDesc() {
return seasonDesc;
}
public static void main(String[] args) {
SeasonEnum SPRING = SeasonEnum.valueOf("SPRING");
System.out.println(SPRING);
}
}