目录
1. 什么是枚举?
2. 枚举类
3. 枚举类的用途
1. 什么是枚举?
我们可以从字面意思来理解,枚:一枚一枚的,举:举例,举出,将二者意思结合起来可以理解为一个一个的举出。
这样听起来可能有些模糊,我来给大家说一个场景。
例如我们定义一个月份类,我们肯定已经确定了该类只有1~12月12个类对象,不会再有别的对象了;还有星期数,只有周一~周日七个类对象,不会有星期八这个对象吧。那么如果我们要将这几个对象全部列出来,可以怎么做呢?
首先我们想到的就是创建一个类,然后有几个对象我们就 new 几个对象。 但是这样做有一个问题,如果我们没有私有化它的构造器,开发时不小心有人又创建了其他对象,那岂不是很多余?一个人多创建一个,那么开发人多的时候,创建的对象也会增多,会不会很占用内存,这样是很不友好的。如果我们在一开始就把这些类的对象提前创建出来,并且不让外界再继续创建新的对象,开发人员在有需要的时候直接拿这个类已经创建好的的对象直接使用是不是会更好。由此就引申出来了我们的枚举类。
2. 枚举类
在 Java 中,除了我们平常所熟知的普通 Class 类,它还专门为我们提供了一种枚举类 Eumn。该方法是在 JDK5 之后新增的一个功能,在JDK5以前我们还需要自定义枚举类,现在我们可以直接创建枚举类。
如下图所示,在创建的时候,它就会问你要创建什么类型的类,这个界面大家都不陌生;
对于我们开发人员来说,最常用的是类和接口 ,其它的用的频率没有那么多,我们在学习枚举类的时候,其实可以把它当作普通的类来看待就可以了,我先来创建一个空的枚举类如下代码。
// 定义一个季节枚举类
public enum Season {}
我们在创建好枚举类之后,就可以开始定义它的对象了,我现在定义了的是一个季节枚举类,我们也都知道,季节只有春夏秋冬四个,所以我们就可以在这个枚举类里面定义四个对象分别对应春夏秋冬。
// 定义一个季节枚举类
public enum Season {// 定义春季spring,// 定义夏季summer,// 定义秋季autumn,// 定义冬季winter
}
这里有几个细节点需要注意!!!
(1)在枚举类中,每个对象前面都是默认添加 public static final 关键词修饰的,public 可以被外界调用。static 静态的可以使用类名.变量名调用,final 修饰不可被外界修改。
(2)每个对象之间使用 "," 分隔开即可,最后一个对象可以不写也可以写 ";" 结尾。
(3)枚举类中已经为各个对象重写了 toString 方法,所以不需要我们再手动添加;
在创建完成对象之后,我们还可以为对象添加属性,这里我给他们添加一个 name 属性,在该枚举类中添加上构造方法
// 定义一个季节枚举类
public enum Season {// 定义春季spring("春"),// 定义夏季summer("夏"),// 定义秋季autumn("秋"),// 定义冬季winter("冬");private String name;private Season(){}private Season(String name){this.name = name;}
}
然乎我们来输出打印一下
创建 main 方法,通过类名.方法名的方式调用,即可咋控制台看到输出结果
3. 枚举类的用途
通过刚才的阐述,我们也可以大致总结出枚举类的用途,当一个类的对象是有限个数时,我们就可以使用枚举类来定义。
在 Java 中,多线程的状态便是采用的枚举类,我们来看一下它的源码就可以得知
State 类就是 Thread 线程类中的一个内部枚举类,里面定义了多个线程的状态,例如NEW,RUNNABLE等等,就不一一说了。