目录
枚举的定义
枚举是JDK1.5以后引入的。主要用途:将一组常量组织起来,在引入枚举之前表示一组常量通常是使用定义常量的方式:
public static final int RED = 1;
public static final int GREEN = 2;
public static final int BLACK = 3;
在引入枚举后我们可以将上述的常量举例直接写成类的形式:
public enum TestEnum {
RED,GREEN,BLACK;
}
枚举的优点:将常量统一组织起来管理
应用场景:错误状态码、消息类型、颜色的划分.......
本质:我们所定义的枚举类,是java.lang.Enum的子类,虽然在写枚举类的时候未写出其继承Enum类,但是其默认继承了这个类.
枚举的使用
Enum类常用的方法
方法名称 | 描述 |
values() | 以数组形式返回枚举类型的所有成员 |
ordinal() | 获取枚举成员的索引位置 |
valueOf() | 将普通字符串转换为枚举示例 |
compareTo() | 比较两个枚举成员在定义时的顺序 |
通过构造方法,定义出一个枚举类
public enum TestEnum {
//枚举对象
CAT("猫"),
DOG("狗"),
BIRD("鸟");
public String animal;
/**
* 枚举的构造方法,默认是私有的
* @param animal
*/
TestEnum(String animal) {
this.animal = animal;
}
}
values()的使用
values()方法是以数组形式返回枚举类型的成员,定义一个枚举类型的数组接收枚举成员,再将其输出.
public static void main(String[] args) {
TestEnum[] testEnums = TestEnum.values();
for(TestEnum x : testEnums){
System.out.println(x);
}
}
运行结果
ordinal()的使用
利用ordinal()方法可以获取枚举成员的索引位置,具体使用如下所示:
public static void main(String[] args) {
TestEnum[] testEnums = TestEnum.values();
for(TestEnum x : testEnums){
System.out.println(x + " " + x.ordinal());
}
}
运行结果
valueOf() 的使用
在定义好枚举类之后,利用valueOf()方法将输入的字符串转换为枚举示例,再对其进行判断
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNext()) {
TestEnum testEnum = TestEnum.valueOf(scan.next());
switch(testEnum) {
case CAT:
System.out.println("猫");
break;
case DOG:
System.out.println("狗");
break;
case BIRD:
System.out.println("鸟");
break;
default:
break;
}
}
}
运行结果
compareTo()的使用
通过对源码的分析,可以发现compareTo()方法的返回值为两个枚举对象的位置差值.
例如:
public static void main(String[] args) {
System.out.println(CAT.compareTo(DOG));
System.out.println(DOG.compareTo(CAT));
System.out.println(BIRD.compareTo(CAT));
System.out.println(CAT.compareTo(BIRD));
}
运行结果
以下列语句进行分析
System.out.println(CAT.compareTo(BIRD));
在定义枚举类时,CAT是默认下标为0的位置,BIRD是默认下标为2的位置,当两个进行比较时,返回的是CAT下标-BIRD下标,结果为-2;
上述所有的示例代码已上传至gitee代码仓库中:点击查看代码
枚举的优缺点
优点:
1、枚举常量更简单安全;
2、枚举具有内置方法,代码更可观优雅
缺点:
1、不可继承,无法扩展.