Java-枚举类

1 枚举类的理解

类的对象只有 有限个 确定

当需要定义一组常量时,强烈建议使用枚举类

举例如下

  1. 星期:Monday(星期一)、…、Sunday(星期天)
  2. 性别:Man(男)、Woman(女)
  3. 季节:Spring(春节)…Winter(冬天)
  4. 支付方式:Cash(现金)、WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)
  5. 就职状态:Busy、Free、Vocation、Dimission
  6. 订单状态:Nonpayment(未付款)、Paid(已付款)、Delivered(已发货)、Return(退货)、Checked(已确认)Fulfilled(已配货)、
  7. 线程状态:创建、就绪、运行、阻塞、死亡

上述如星期就作为一个类,其中的对象就是星期一,星期二等


2 枚举类的定义

2.1自定义枚举类

  1. 声明对象的属性,用 private final 修饰

  2. 私有化类的构造器,并对对象属性赋值

  3. 提供当前枚举类的多个对象

  4. 其他诉求

    1. 获取枚举类对象的属性 可以提供get
    2. 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

  1. 提供当前枚举类的对象,多个对象之间用“,”隔开,最后一个用分号
  2. 声明对象的属性,用private final
  3. 私有化类的构造器,并对对象属性赋值
  4. 提供get方法
  5. 不用提供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类的主要方法

image-20210619173257662

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. 实现接口的枚举类

image-20210619173738065

情况一

实现接口,在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);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值