一.枚举
枚举:选项数量有限且固定,使用枚举更直观和方便
1.注意事项
- 所有枚举类都是Enum类的子类
- 枚举项必须放在枚举类中的第一行
- 如果除了有枚举项还有其他代码,枚举项末尾不可以省略分号
;
- 构造器必须是私有的,枚举类已经默认给定了私有空参构造器,如果手动添加了有参构造器,则不再提供无参构造器,如需使用需要手动添加无参构造器
- 如果枚举类中有抽象方法,枚举项必须重写该方法
2.无参构造枚举
public enum Gender {
//枚举项名称应该全字母大小
//枚举项必须放在第一行
//枚举类中只有枚举项时,可以省略最后的分号;
MALE,FEMALE
//枚举类默认提供了私有的空参构造器
}
↑
等同于
↓
public class Gender {
public final static Gender MALE=new Gender();
public final static Gender FEMALE=new Gender();
private Gender(){}
}
3.有参构造枚举
public enum Gender {
//枚举类有其他代码时,不可以省略最后的分号;
//枚举项可以使用有参构造和无参构造
MALE("男"),FEMALE;
//自定义属性和方法
private String name;
public String getName() {
return name;
}
//有参构造
private Gender(String name){
this.name=name;
}
//如果手动添加有参构造后,需要用到无参构造自己需要手动添加无参构造
private Gender(){}
}
↑
等同于
↓
public class Gender {
public final static Gender MALE=new Gender("男");
public final static Gender FEMALE=new Gender();
private String name;
public String getName() {
return name;
}
private Gender(String name){
this.name=name;
}
private Gender(){}
}
4.抽象方法
public enum Gender {
MALE(){
//重写枚举类的抽象方法
public String getValue() {
return "男";
}
},
FEMALE(){
public String getValue() {
return "女";
}
};
//自定义属性和方法
private String name;
public String getName() {
return name;
}
//有参构造
private Gender(String name){
this.name=name;
}
//无参构造
private Gender(){}
public abstract String getValue();
}
↑
等同于
↓
public abstract class Gender {
public final static Gender MALE=new Gender(){
public String getValue() {
return "男";
}
};
public final static Gender FEMALE=new Gender(){
public String getValue() {
return "女";
}
};
private String name;
public String getName() {
return name;
}
private Gender(String name){
this.name=name;
}
private Gender(){}
public abstract String getValue();
}
5.switch枚举
Gender male=Gender.MALE;
//判断枚举类对象是哪个枚举项
switch(male){
case MALE:
System.out.println("男");
break;
case FEMALE:
System.out.println("女");
break;
}
6.Enum类常用方法
int ordinal()
获取枚举项的位置序号,序号从0开始String name()
获取枚举项的名称int compareTo(E o)
根据序号大小比较两个枚举项的大小static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
根据字节码对象和枚举项名称获取枚举对象static <T> T[] values()
获取枚举类中所有的枚举项
Gender male=Gender.MALE;
//获取枚举项的位置序号
int index=male.ordinal();
//获取枚举项的名称
String name=male.name();
//比较两个枚举项的大小,即Gender.MALE.ordinal()-Gender.FEMALE.ordinal()
int num=male.compareTo(Gender.FEMALE);
//通过反射创建枚举类对象
Gender g=Enum.valueOf(Gender.class, "FEMALE");
//获取枚举类中所有的枚举项
Gender[] arr= Gender.values();
for (Gender gender : arr) {
System.out.println(gender);
}
System.out.println(index);
System.out.println(name);
System.out.println(num);
System.out.println(g);