枚举类 enum
本文章是通过学习B站视频韩顺平30天学java写的笔记
2022/2/20
?![]()
引入
当有多个固定的对象需要定义时, 如果每一个对象都要新建, 例如对于季节类, 需要春夏秋冬四个对象, 而按照之前所学内容, 要用户来创建对象, 那么四个季节就不固定. 季节只有四个, 用户定义没限制. 枚举类型是把具体的对象一个一个列举出来的类,因此季节可用枚举类来设计季节类
理解
枚举是一组常量的集合. 可以理解为: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象
自定义枚举流程
- 使用关键字
enum替代class - 定义常量, 例如: 本质是
public static final Season SPRING = new Season("Spring", "warm");可以直接用SPRING("Spring", "warm")替代. 解读:常量名( 实参列表...) - 如果有多个常量, 使用
,间隔即可. 例如SPRING("Spring", "warm"), SUMMER("Summer", "hot"); - ???使用enum来实现枚举, 要求将定义的常量写在最前面
enum关键字实现枚举注意事项
- 当我们使用enum关键字来开发一个枚举类时, 默认会继承Enum类, 这里使用javap工具来进行反编译验证

Compiled from "Enumeration01.java" final class com.hspedu.enum_.Season2 extends java.lang.Enum<com.hspedu.enum_.Season2> {
public static final com.hspedu.enum_.Season2 SPRING;
public static final com.hspedu.enum_.Season2 SUMMER;
public static final com.hspedu.enum_.Season2 AUTUMN;
public static final com.hspedu.enum_.Season2 WINTER;
public static com.hspedu.enum_.Season2[] values();
public static com.hspedu.enum_.Season2valueOf(java.lang.String);
public java.lang.String getName();
public java.lang.String getDesc();
public java.lang.String toString();
static {};
}
- 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成SPRING(“春天”, “温暖”); 这里要明白它调用的哪个构造器. 格式: 对象名(实参列表), 这里实参列表是传给构造器的
- 如果使用无参构造器, 创建枚举对象, 则实参列表和小括号都可以省略(省不省略都可以)
- 当有多个枚举对象的时候,使用’ , ’ 间隔, 最后一个用分号结尾 枚举对象必须放在枚举类的行首
课堂练习
enum Gender{
BOY, GIRL;
}
正确的写法, 调用无参构造器, 对象名是BOY, 和GIRL. 这里对象名就是常量名, 一般枚举类内部定义的变量后续操作不可更改, 视为常量.
enum常用方法说明
原理: 使用enum时, 会所建类会隐式继承Enum类, 这样我们就可以使用Enum类相关的方法
**对象名.name(); **输出对象的名字
**对象名.ordinal();**输出对象的编号,从0开始
类名.values(); 返回枚举类定义的所有对象, 返回的是一个数组
新知识点: 增强for循环,for(Season2 season : values){}/每次循环将数组的一个元素传入到season, 没有了就退出
**类名.valueOf()**将字符串转化为枚举对象, 要求字符串必须为已有的常量名, 否则报错
//1.根据输入的名称"SPRING"到Season2的枚举类对象去查找,找到了就返回给spring1对象,否则报错
Season2 spring1=Season2.valueOf("SPRING");
且返回类型的对象引用类型, 即运行类型的地址
compareTo 比较两个枚举常量(对象), 比较的是编号对应values
enum实现接口
使用enum关键字后, 所创建的类不能再继承其他类了, 因为enum会隐式继承Enum, 而java是单继承机制
枚举类和普通类一样, 可以实现接口, 如下格式
enum 类名 implements 接口1, 接口2{
}
| 以上就是enum类的全部内容了, 有不正确的地方欢迎大佬指正, 在下是编程小白蓝鸟x |
版权声明:本文为weixin_46619912原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。