JAVA核心基础篇-枚举
什么是枚举
在 Java 中,枚举(Enumeration)是一种特殊的数据类型,用于定义固定数量的常量集合。它在 JDK 1.5 中被引入,提供了一种更优雅、类型安全的方式来表示固定的取值范围。
所谓的枚举就是相当于一种来存放常量的特殊的类。枚举本身就是一个类
枚举的定义
枚举使用enum
关键字定义,基本语法如下:
enum 枚举名 {常量1,常量2,...常量n;
}
// 定义一个表示星期的枚举
enum Day {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
- 枚举没有无参构造。
- 反射不能破坏枚举。
- 枚举成员的类型默认为,final和public和static修饰
- 枚举中的构造方法必须用private修饰,所以默认为private,可以省略
- 构造方法基本使用于有参枚举成员,再通过创建get方法获得参数
使用枚举的优点
- 类型安全:枚举常量是类型化的,编译器会检查类型匹配,避免错误赋值
- 不可变:枚举常量在定义后不能被修改
- 单例性:每个枚举常量都是枚举类的唯一实例
- 默认继承 Enum 类:所有枚举都隐式继承
java.lang.Enum
,因此不能再继承其他类- 可实现接口:枚举可以实现一个或多个接口
枚举使用场景
- 表示固定的取值范围(如星期、月份、季节等)
- 状态码定义(成功、失败、警告等)
- 替代常量定义(相比public static final方式更安全)
- 开关选项(如性别、是否等二元选项)
- 在 switch 语句中使用(比整数更易读)
枚举的常用方法
从
Enum
类继承的常用方法:
name()
:返回枚举常量的名称ordinal()
:返回枚举常量的位置索引(从 0 开始)valueOf(Class<T> enumType, String name)
:根据名称获取枚举常量values()
:返回枚举类型的所有常量数组(编译器自动生成)
枚举enum和静态变量的区别
有些时候变量的取值只在一个有限的集合内。例如,一些状态等等;
Java中定义的枚举类型都是Enum类的子类,它可以有构造器,方法和域。还继承了许多方法,toString()、valueOf()、values()等等具体看文档。这让它比静态变量更丰富。
枚举类型是强类型的,从而保证了系统安全性。枚举可以限定参数的个数,对调用者的行为能更加严格地进行控制。把一些运行期的参数检查放到了编译期。通俗的来讲就是枚举更加安全,提高了代码的可读性。
使用静态常量是无法存入更多的属性值使用枚举可以存储code,name,color,feel等信息,而且并没有限制,但是使用静态常量就只能存储code和name两个值还有就是在使用过程中,无法传入的参数进行限制使用枚举时,传入的参数为为Season的枚举类型的数据,这也就限定了参数的范围,降低了代码出错的可能性但是使用静态常量的话,传入的只是一个整型数据,如果使用时传递了一个1-4之外的数,程序时不会报错的,但是在运行时就会出错
枚举提供了一种清晰、安全的方式来处理固定集合的常量,在实际开发中广泛应用,特别是需要提高代码可读性和可维护性的场景。