在Java中,一个类有可穷举个数的对象时,可以使用枚举表示,枚举中这些对象的数量是一定的,且对象不可以更改;
使用enum关键字表示枚举,默认继承java.lang.Enum类,Java单继承机制,枚举不能再去继承其他类,但是可以实现其他接口;
使用enum关键字表示枚举,在enum中先写常量对象,多个常量对象之间用逗号分隔,最后一个常量后面加分号,然后再写枚举对象中用到的属性和对应的getter方法;
一 创建枚举enum
创建有成员变量的枚举
@Getter
public enum EnumOne {
// 枚举对象放在最前面, 且对象名字大写
// 多个枚举对象之间使用逗号分隔, 最后一个对象使用分号
ONE("one", "一", "1001"),
TWO("two", "二", "2001"),
THREE("three", "三", "3001"),
FOUR("four", "四", "4001");
// 枚举中的属性使用final关键字修饰, 表示常量不可被修改
private final String name;
private final String brief;
private final String msg;
// 默认是私有构造器
EnumOne(String name, String brief, String msg) {
this.name = name;
this.brief = brief;
this.msg = msg;
}
@Override
public String toString() {
return "EnumOne{" +
"name='" + name + '\'' +
", brief='" + brief + '\'' +
", msg='" + msg + '\'' +
'}';
}
}
创建没有成员变量的枚举
public enum EnumTwo {
// 枚举对象放在最前面, 且对象名字大写
// 多个枚举对象之间使用逗号分隔, 最后一个对象使用分号
ONE, TWO, THREE, FOUR, FIVE;
}
二 枚举enum常用方法
2.1 枚举名.常量名
public static void main(String[] args) {
EnumOne enumOne = EnumOne.ONE;
// 如果枚举EnumOne没有重写toString()方法, 那么打印的是枚举对象名字:
// ONE
// 如果枚举EnumOne有重写toString()方法, 那么打印的是枚举对象内容:
// EnumOne{name='one', brief='一', msg='1001'}
System.out.println(enumOne);
// 如果枚举有成员变量和getter方法, 调用如下
System.out.println("name is: " + enumOne.getName());
System.out.println("brief is: " + enumOne.getBrief());
System.out.println("msg is: " + enumOne.getMsg());
}
2.2 values()方法
public static T[] values():获取当前枚举的所有成员,以数组的形式返回;
public static void main(String[] args) {
EnumOne[] values = EnumOne.values();
for (EnumOne value : values) {
// EnumOne{name='one', brief='一', msg='1001'}
// EnumOne{name='two', brief='二', msg='2001'}
// EnumOne{name='three', brief='三', msg='3001'}
// EnumOne{name='four', brief='四', msg='4001'}
System.out.println(value);
}
}
2.3 valueOf()方法
public static <T extends Enum<T>> T valueOf(String name):使用指定的字符串创建枚举对象,且指定的字符串在枚举中有对应的常量;
public static <T extends Enum<T>> T valueOf(Class<T> enumClass, String name):指定枚举的Class类型,和枚举中已存在的常量;
public static void main(String[] args) {
EnumOne enumOne = EnumOne.ONE;
EnumOne enumOne1 = EnumOne.valueOf("ONE");
EnumTwo five = EnumOne.valueOf(EnumTwo.class, "FIVE");
System.out.println(enumOne);
System.out.println(enumOne1);
System.out.println(five);
}
2.4 name()方法
public final String name():获取当前枚举常量的名称
public static void main(String[] args) {
EnumOne enumOne = EnumOne.ONE;
// result is: ONE
System.out.println("result is: " + enumOne.name());
}
2.5 ordinal()方法
public final int ordinal():获取当前枚举对象对应的编号次序,即在枚举中定义的顺序,从0开始编号,类似数组的特征(每个枚举元素都有一个索引值,表示索引的位置),初始值从0开始;
public static void main(String[] args) {
EnumOne enumOne = EnumOne.ONE;
// result is: 0
System.out.println("result is: " + enumOne.ordinal());
}
2.6 compareTo()方法
public final int compareTo(E o):比较两个枚举常量的编号,方法返回值是方法调用者的编号前去参数的编号,如果返回值是0,表示同一个枚举对象;
public static void main(String[] args) {
EnumOne enumOne = EnumOne.ONE;
EnumOne enumOne2 = EnumOne.ONE;
EnumOne enumTwo = EnumOne.TWO;
// result is: 0
System.out.println("result is: " + enumOne.compareTo(enumOne2));
// result is: -1
System.out.println("result is: " + enumOne.compareTo(enumTwo));
}