枚举
枚举(enum)是Java5中新增的一个特殊类,枚举类型是java中的一种引用数据类型。
枚举类中定义的一般为一组特殊的常量,可以被一一列举,例如星期、季节等。
枚举的特点
- 增强可读性
- 提高安全性,使数据相关的报错在编译阶段进行提示
- 通过反编译可以观察得出所有枚举类型默认基础Java.lang.Enum,且所有枚举类型都被final进行修饰,所以枚举无法被继承
枚举的基本用法
普通写法与定义枚举值写法的区别
普通写法无法对基本类型的数据进行规范,get()方法可以返回任何整数,不受规范。定义枚举类可以在编译阶段时,通过编译器进行提示。
//普通写法
public class Test {
public static void main(String[] args) {
int num = get();
switch (rgb){
case 1 -> System.out.println("红色");
case 2 -> System.out.println("绿色");
case 3 -> System.out.println("蓝色");
}
}
private static int get() {
return 1;
}
}
//定义枚举值写法
public class RgbColoTest {
public static void main(String[] args) {
RgbColor rgb = get();
switch (rgb){
case RgbColor.BULEE -> System.out.println("红色");
case RgbColor.GREEN -> System.out.println("绿色");
case RgbColor.RED -> System.out.println("蓝色");
}
}
private static RgbColor get() {
return RgbColor.BULEE;
}
}
values()
枚举类中默认存在values()数组,可以通过该数组遍历该类的枚举值
//遍历枚举
for (RgbColor color : RgbColor.values()) {
System.out.println(color.getName());
}
枚举的高级用法
在普通类中可以编写的代码同样可以编写在枚举类中。例如静态代码块、构造代码块、静态方法、实例方法、静态变量、实例变量。
public enum RgbColor{
//若枚举类中定义了构造方法,需要在没居中创建实例对象,并且枚举值只能定义在最上方。
RED("红色", "这是红色"),
GREEN("绿色", "这是绿色"),
BULEE("蓝色", "这是蓝色");
String name;
String describe;
//静态代码块
static {
System.out.println("静态代码块执行");
}
//枚举类的构造方法默认为私有的,外界无法调用,需要在定义枚举值时传递参数
RgbColor(String name, String descibe){
this.name = name;
this.describe = descibe;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescribe() {
return describe;
}
public void setDescribe(String describe) {
this.describe = describe;
}
}