一、使用关键字enum定义枚举类
如果类的对象只有有限个,确定的,强烈建议使用枚举类。JDK5.0后用关键字enum定义。
-枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
-枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
-若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应地传入参数
-使用 enum 定义的枚举类默认继承了 java.lang.Enum类,因此不能再继承其他类
-enum的toString方法默认输出对象的名字,若想自定义输出内容要重写。
-必须在枚举类的第一行声明枚举类对象
enum Season {
SPRING("1","IlikeIt"),
SUMMER("2","IHateIt"),
AUTUMN("3","IlikeIt"),
WINTER("4","IHateIt");
private final String name;
private final String desc;
Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
测试:
System.out.println(Season.SPRING);
System.out.println(Season.SUMMER);
Season{name='1', desc='IlikeIt'}
Season{name='2', desc='IHateIt'}
二、Enum类的主要方法
values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的 枚举值。
valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常: IllegalArgumentException。
toString():返回当前枚举类对象常量的名称
System.out.println(Season.values()[0]);
System.out.println(Season.valueOf("SUMMER"));
System.out.println(Season.WINTER.toString());
Season{name='1', desc='IlikeIt'}
Season{name='2', desc='IHateIt'}
Season{name='4', desc='IHateIt'}
三、实现接口的枚举类
对于实现了接口的枚举类,我们要在每个枚举对象中实现接口中的方法。
interface info{
void voice();
}
enum Season implements info{
SPRING("1","IlikeIt"){
@Override
public void voice() {
System.out.println("春天");
}
},
SUMMER("2","IHateIt") {
@Override
public void voice() {
System.out.println("夏天");
}
},
AUTUMN("3","IlikeIt") {
@Override
public void voice() {
System.out.println("秋天");
}
},
WINTER("4","IHateIt") {
@Override
public void voice() {
System.out.println("冬天");
}
};
private final String name;
private final String desc;
Season(String name, String desc) {
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
测试:
Season.AUTUMN.voice();
Season.WINTER.voice();
秋天
冬天