1、什么是枚举类?
枚举类(Enumeration Class)是一种数据类型,它包含了一组预定义的常量值。在编程语言中,枚举类通常用于表示一组固定的常量值,使得代码更加清晰和易于理解
枚举类型就是多例,一个类有多个实例,但是实例的个数不是无穷的,是有限的;枚举类中实例称为枚举项,一般一个枚举类不应该有太多的枚举项
2、枚举类有什么优点
-
提高代码可读性:使用枚举类可以清楚地表示一组相关的常量,使得代码更加直观易懂。
-
防止错误:由于枚举类中的值是预定义的,可以避免在代码中使用错误或不一致的值。
-
类型安全:枚举类提供了类型安全,编译器可以在编译时检查枚举值的使用,防止类型错误。
-
易于维护:当需要修改或扩展一组常量时,使用枚举类可以集中管理这些值,方便维护。
-
用于switch-case语句:在某些编程语言中,枚举类可以与switch-case语句一起使用,提供更清晰的逻辑分支。
-
序列化和反序列化:枚举类可以方便地进行序列化和反序列化操作,便于数据的存储和传输。
3、创建枚举类?
假设你在开发一个天气应用,需要表示天气状态。如果不使用枚举类,你可能会用一些数字或者字符串来表示,比如用0表示“晴天”,1表示“多云”,这样虽然也能工作,但很容易出错,比如不小心把0写成了1,或者忘记了具体代表什么天气
就是某些类别不涉及数字,你又想给他们进行编号,
第一种方式是使用数字来进行标识,把原本字符串类型的数据使用整形来对待
第二种方式是使用枚举类来创建若干个枚举,在使用时直接调用该类的枚举就可以标识某一个类别
创建枚举类
//不需要往里进行设置值,所以只需要定义Getter方法
@Getter
public enum StatusEnums {
//创建枚举
YES(1,"正常"),
NO(0,"异常");
private final Integer status;
private final String desc;
//生成构造函数,默认是私有的
StatusEnums(Integer status, String desc) {
this.status = status;
this.desc = desc;
}
}
3.1、注意事项:
当没有定义属性构造函数是无参的,修饰符是私有的,而且只能是private修饰,因为枚举类实例不能让外界来创建,其实创建枚举项就等于调用本类的无参构造器,当定义了属性,创建枚举就相当于调用了有参构造函数
枚举类使用关键字enum ,所有关键字都是小写
如果类只有唯一的构造器,并且是有参的构造器,那么在创建枚举项时,必须为构造器赋值枚举是大写,括号是所有属性的数据
创建枚举项时 多个枚举项之间用逗号隔开,最后一个用分号结尾
4、枚举类中的方法
所有枚举类默认都是Enum的子类,无需使用extends来继承,这说明Enum中的方法所有枚举类都拥有,创建该枚举的实例就可以使用这些方法了
枚举类也可以有抽象方法和普通方法和静态方法,但是不经常使用
静态方法:只需要在该方法上加上static关键字。
5、枚举类型在switch中的使用
在switch不能使用枚举类名称因为编译器会根据switch中d的类型来判断每个枚举类型,在case中必须直接给出与d相同类型的枚举项,而不能在有类型
只需记住:在case中使用时不需要加类型、
public class SwitchTest {
@Test
public void testEnum(){
WeekEnums sunday = WeekEnums.Sunday;
switch (sunday){
case Monday:
System.out.println("星期一");
case Tuesday:
System.out.println("星期二");
}
//调用枚举类的自定义普通方法
sunday.first();
//调用枚举类的静态方法 类名.方法
WeekEnums.second();
//调用枚举类的父类Enum的方法,所有枚举类的父类默认是Enum,无需extends
sunday.name();
sunday.hashCode();
sunday.notify();
//等等.........
}
}