什么是枚举
枚举属于一组特殊的类,里面只包含一组有限的特定的对象,一般表示一组常量。
枚举的好处:可以讲常量组织起来统一进行管理。
枚举可以添加方法,除了不能继承,基本上可以将它看成一个常规的类
枚举可以添加普通方法、静态方法、抽象方法、构造方法
语法定义格式:
enum枚举名{枚举元素1,枚举元素2,……}
实例:
eunm Animal{
Cat,Dog,sheep;//常量
}
任意两个枚举成员不能具有相同的名称,它们的数值必须在该枚举的基础类型范围之内
可以通过枚举类型名直接引用常量如 Animal.Dog。
📣提示:如果没有显式地声明基础类型的枚举,那么默认基础类型是 int。
枚举实现方式
自定义实现枚举
- 不需要提供set方法,因为枚举对象通常为只读
- 对枚举对象/属性使用final+static共同修饰,实现底层优化
- 枚举对象名通常使用全部大写,常量的命名规范
- 枚举对象根据需要,也可以有多个属性
自定义枚举的特点
- 构造器私有化
- 本类内部创建一组对象
- 对外暴露对象(通过为对象添加public final static修饰符)
- 可以提供get方法,但不要提供set方法
使用enum关键字实现枚举
- 使用关键字enum替代calss
- public static final Season MONDAY=new Season(星期一)直接使用MONDAY(“星期一”)替代
常量名(实参列表) - 如果有多个常量(对象),使用“,”隔开,最后一个以‘;’号结尾。
- 如果使用enum来实现枚举,要求将定义常量对象写在前面。
实例:
package com.Enum;
public class s {
public static void main(String[] args) {
//获取所有的枚举对象,即数组
Week[] s=Week.values();
//遍历使用增强for
for (Week week:s)
System.out.println(week);
}
}
enum Week{//使用关键字enum来替代class
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
THURSDAY("星期四"),FRIDAY("星期五"),SATURDAT("星期六"),
SUNDAY("星期天");
private String name;
private Week(String name){
this.name=name;
}
@Override
public String toString() {
return name;
}
}
注意事项❗️
1️⃣ 当我们使用enum关键字开发一个枚举类时,默认会继承Enum类,而且是一个final类
2️⃣ 枚举对象必须放在枚举类的最前面
3️⃣ 如果我们使用的是无参构造器,创建常量枚举对象,则可以省略实参列表和小括号
4️⃣枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
5️⃣使用enum关键字后,就不能再继承其他类了,因为enum会隐式继承Enum,而java是单继承机制
6️⃣枚举类和普通类一样,可以实现接口,如: enum 类名 implements 接口1,接口2{ }
枚举可以像一般类一样实现接口
枚举成员
- 枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
- 枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
常用方法
Java 中的每一个枚举都继承自 java.lang.Enum 类。当定义一个枚举类型时,每一个枚举类型成员都可以看作是 Enum 类的实例,这些枚举成员默认都被 final、public, static 修饰,当使用枚举类型成员时,直接使用枚举名称调用成员即可。
所有枚举实例都可以调用Enum类的方法:
- values():返回枚举类中所有的值
- valueOf():返回指定字符串值的枚举常量
- ordinal():可以找到每个枚举常量的索引,就像数组索引一样
实例1:利用values()方法返回枚举类中所有的值
public class g {
public static void main(String[] args) {
for (int i=0;i<show.values().length;i++){//遍历枚举类中的元素
System.out.println(show.values()[i]);
}
}
}
enum show{//定义枚举类
FRIDAY,SATURDAY,SUNDAY
}
运行结果:
FRIDAY
SATURDAY
SUNDAY
实例2:利用ordinal()方法,找到每个枚举常量的索引
package A;
public class g {
public static void main(String[] args) {
for (int i=0;i<show.values().length;i++){
System.out.println("索引"+show.values()[i].ordinal()+"的值为:"+show.values()[i]);
}
}
}
enum show{
FRIDAY,SATURDAY,SUNDAY
}
运行结果:
索引0的值为:FRIDAY
索引1的值为:SATURDAY
索引2的值为:SUNDAY