创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)
枚举适用场合:
当对象个数已知并且有限
创建枚举对象
public enum Sex {
//给枚举对象加入属性,通过getXxx()获取属性
MALE("男"),
FEMALE("女");
private String cnName;
public String getCnName() {
return this.cnName;
}
public String test(){
return "ok";
}
Sex(String cnName) {
this.cnName=cnName;
}
}
常用方法:
public static void main(String[] args) {
//获取枚举对象的序号,序号从0开始
System.out.println(Sex.MALE.ordinal());
System.out.println(Sex.FEMALE.ordinal());
//把枚举对象转换为字符串
System.out.println(Sex.MALE.name());
System.out.println(Sex.FEMALE.name());
//把字符串转为枚举对象
System.out.println(Sex.valueOf("MALE"));
System.out.println(Sex.valueOf("FEMALE"));
//虚拟机中枚举对象只有一个,可以用==连接
System.out.println(Sex.valueOf("MALE")==Sex.MALE);
//打印所有枚举对象
for (Sex value : Sex.values()) {
System.out.println(value);
}
//枚举对象调用构造方法
System.out.println(Sex.MALE.getCnName());
System.out.println(Sex.FEMALE.getCnName());
//枚举对象调用方法
System.out.println(Sex.MALE.test());
}
注意:枚举个数是固定,有限,因此构造方法不能是公共的,否则会无限制创建对象,有参构造要和创建枚举对象相匹配。
int compareTo(E o) ,比较此枚举与指定对象的顺序
public enum Day {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
public static void main(String[] args) {
Day test = Day.TUE;
//int compareTo(E o) ,比较此枚举与指定对象的顺序
int i = test.compareTo(Day.MON);
switch (i){
case -1:
System.out.println("TUE 在 MON 之前");
break;
case 1:
System.out.println("TUE 在 MON 之后");
break;
default:
System.out.println("TUE 与 MON 在同一位置");
break;
}
}
和switch语句配合使用
Day tue = Day.TUE;
switch (tue) {
case MON:
System.out.println("今天是星期一");
break;
case TUE:
System.out.println("今天是星期二");
break;
// ... ...
default:
System.out.println(tue);
break;
}
EnumSet, EnumMap的使用
public static void main(String[] args) {
// EnumSet的使用
EnumSet<Day> weekSet = EnumSet.allOf(Day.class);
for (Day day : weekSet) {
System.out.println(day);
}
// EnumMap的使用
EnumMap<Day, String> weekMap = new EnumMap(Day.class);
weekMap.put(Day.MON, "星期一");
weekMap.put(Day.TUE, "星期二");
// ... ...
Iterator<Map.Entry<Day, String>> iterator = weekMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Day, String> next = iterator.next();
System.out.println(next.getKey() + "==" + next.getValue());
}
}