【java 基础】 枚举深入理解

1、什么时候用枚举

如果类的对象是有限个,确定的,那么我们就可以用枚举类。枚举理解成一一列举。
比如支付状态和订单状态:

支付方式:cash(现金) WeChatPay(微信)、Alipay(支付宝)、BankCard(银行卡)、CreditCard(信用卡)
订单状态:Nonpayment(未付款)、Paid(已付款)、Fulfilled(已配货)、Delivered(已发货)、
Returen(退货)、Checked(已确认)

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

jdk中用枚举的例子:
线程的状态:

 public enum State {
        NEW,
        RUNNABLE,
        BLOCKED,
        WAITING,
        TIMED_WAITING,
        TERMINATED;
    }
2、自定义枚举类

jdk1.5之前我们需要自己定义枚举类:
(1)声明Season对象的属性:private final 修饰
(2)构造器私有化 因为枚举类的对象是有限的,确定的,如果是公有的就违背了这一原则
(3)提供当前枚举类的多个对象:public static final

class Season{
    //1、 声明Season对象的属性:private final 修饰
    private final String seasonName;


    // 2、 构造器私有化  因为枚举类的对象是有限的,确定的,如果是公有的就违背了这一原则
    private  Season(String seasonName){
        this.seasonName=seasonName;
    }

    // 3、提供当前枚举类的多个对象:public static final
    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;
    }
    
    @Override
    public String toString() {
       return  seasonName;
    }
}
/**
 * 自定义枚举类
 */
public class SeasonTest {
    public static void main(String[] args) {
        Season spring =Season.SPRING;
        System.out.println(spring);
    }
}

运行结果 春天

3、使用enum枚举类

用关键字enum来进行定义枚举类

public enum Season {
    // 1、提供当前枚举类的对象,多个对象用,隔开,末尾用;
    SPRING("春天"),
    SUMMER("夏天"),
    AUTUMN("秋天"),
    WINTER("冬天");

    // 2、声明season对象的属性:private final修饰
    private final String seasonName;

    // 3、 构造器私有化  因为枚举类的对象是有限的,确定的,如果是公有的就违背了这一原则
     Season(String seasonName) {
        this.seasonName = seasonName;
    }

    public String getSeasonName() {
        return seasonName;
    }
}
public class Main {
    public static void main(String[] args) {
        // 执行结果为SPRING,而不是一个地址值,打印一个对象默认调用的是这个对象的toString,
        //说明它的tostring被重写了,说明它的父类不是Object
        System.out.println(Season.SPRING);

        // 执行结果是class java.lang.Enum 说明它的父类是Enum
        System.out.println(Season.class.getSuperclass());
    }
}

执行结果
在这里插入图片描述
从上面分析的来看,枚举的父类是Enum

4、 Enum的常用方法

(1)toString(): 返回当前枚举类 对象常量的名字
(2)values(): 返回枚举类型的对象数组。该方法可以很方便的遍历所有的枚举值。

        Season[] values = Season.values();
        for (Season value : values) {
            System.out.println(value);
        }

打印结果:
在这里插入图片描述
(3)valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的名字。如不是,会有运行时异常:IllegalArgumentException。

eg:

Season mo = Season.valueOf("mo");

报错:
在这里插入图片描述

        Season winter=Season.valueOf("WINTER");
        System.out.println(winter);

输出结果:WINTER

5、枚举类实现接口

主要展示让枚举类的对象分别展示接口中的抽象方法

interface Info{
    void show();
}

public enum Season implements Info{
    // 1、提供当前枚举类的对象,多个对象用,隔开,末尾用;
    SPRING("春天"){
        @Override
        public void show() {
            System.out.println("春天在哪里");
        }
    },
    SUMMER("夏天"){
        @Override
        public void show() {
            System.out.println("夏天在哪里");
        }
    },
    AUTUMN("秋天"){
        @Override
        public void show() {
        }
    },
    WINTER("冬天"){
        @Override
        public void show() {
        }
    };
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值