枚举
当对象的个数固定的时候,我们可以用enum关键字替代class关键字,定义一个枚举类。在枚举类内部,我们直接把枚举类实例化成对象,枚举类的对象称作枚举项。实例化语法:对象名(成员变量参数),不需要new出新对象再传递给变量名。此外还需要把构造函数私有化,防止外部实例化该枚举类。枚举项在底层其实就是常量,JVM中默认会在枚举项前加上public static final,外部可以直接通过类名调用类中的枚举项,并且枚举项的内容不可修改。
在main方法调用该枚举类的语法:变量名 = 类名.枚举项
然后通过:
switch(变量名){
case 枚举项->system.out.println(内容);
}
根据变量名匹配对应的枚举项,再输出相应内容。
枚举的注意事项
- 每一个枚举项,都是该枚举类的对象,每一个对象都是通过构造方法创造出来的
- 枚举项在底层其实就是常量,默认用public static final修饰
- 枚举类的第一行上必须是枚举项,枚举项之间用逗号隔开,以分号左右结尾
- 枚举类的构造方法必须是private修饰,不让外界创建本类的对象,也可以省略不写,JVM默认会加上private
- 编译器会给枚举类新增两个默认存在的方法,values(),valueOf
values():表示获取本类所有的枚举项
valueOf():表示获取一个指定的枚举项,相当于用类名调用枚举项
枚举类.valueOf (字符串) = 通过名字找枚举常量
把字符串 → 转成枚举对象
假设有枚举项RED
Color.RED
→ 编译期就确定,写死的,最安全最快
Color.valueOf(变量)
→ 运行时才知道名字,动态查找枚举
→ 前端传参、数据库读取、配置文件解析…… 都靠它
Color.valueOf("RED")
→ 语法合法,但纯属多余,正常人不这么写
只有参数是动态变量时,valueOf 才有意义;
传固定字符串,那就是多此一举。
浙公网安备 33010602011771号