把具体对象列举出来的类,是常量的一个集合,常量名全都大写,一种特殊的类,只包含一组有限的特定对象
枚举的两种形式:
(1)自定义:构造器私有化、去掉set方法、在类内创建固定对象成员:public static final
package emun_;
public class Enumration {
public static void main(String[] args) {
System.out.println(Season.SPRING);
System.out.println(Season.WINTER);
}
}
class Season {
public static final Season SPRING = new Season("spring","warm");
public static final Season SUMMER = new Season("summer","hot");
public static final Season AUTUMN = new Season("autumn","cool");
public static final Season WINTER = new Season("winter","cold");
private String name;
private String des;
private Season(String name,String des){//私有化构造器
this.name = name;
this.des = des;
}
public String getName() {
return name;
}
public String getDes() {
return des;
}
@Override
public String toString() {
return "Season{" +
"name='" + name + '\'' +
", des='" + des + '\'' +
'}';
}
}
(2)使用enum关键字:
使用enum代替class;
使用“ 常量名(实参列表)”来创建枚举对象,这里的实参列表与类中私有的构造器参数列表对应,如果使用的是无参构造器,可以省略参数和小括号。多个对象使用逗号间隔,最后使用分号结束;
枚举对象的创建一定要放在所有类成员的最前面
注意:使用enum创建的枚举类会默认的继承Enum类,并且是final的类,可以通过“javap”命令对class文件进行反编译结果如下:
由于Java是单一继承机制,因此使用enum定义的枚举类不能在继承其他的类,但是可以实现多个接口
Enum类的常用方法:
package emun_;
public class Enumration01 {
public static void main(String[] args) {
System.out.println(Season2.SPRING);
System.out.println(Season2.SUMMER);
//默认继承Enum,其常用方法演示
Season2 a = Season2.AUTUMN;
System.out.println(a.name());//获得该枚举对象常量名称
System.out.println(a.ordinal());//输出该枚举对象的编号,从0开始
Season2[] season2s = Season2.values();//返回所有枚举对象组成的数组,该方法没有显示,但是可以在反编译中看到
for(Season2 s:season2s){
System.out.println(s.toString());
}
Season2 b = Season2.valueOf("SPRING");//将字符串转换成对应的枚举对象,字符串必须是有的,否则会报错
System.out.println("b = "+b.toString());
//返回前者编号减去后者编号,比较编号大小
System.out.println(Season2.SUMMER.compareTo(Season2.AUTUMN));
}
}
enum Season2{
SPRING("spring","warm"),SUMMER("summer","hot"),AUTUMN("autumn","cool"),
WUCAN1,WUCAN2();
private String name;
private String des;
private Season2(String name,String des){
this.name = name;
this.des = des;
}
private Season2(){
}
@Override
public String toString() {
return "Season2{" +
"name='" + name + '\'' +
", des='" + des + '\'' +
'}';
}
}
例子:
package emun_;
public class Enum_exercise {
public static void main(String[] args) {
Week[] week = Week.values();
for(Week day:week){
System.out.println(day.getName());
}
}
}
enum Week{
MONDAY("星期一"),TUESDAY("星期二"),WEDNESDAY("星期三"),
THIRSDAY("星期四"),FRIDAY("星期五"),SUNDAY("星期六"),SATUDAY("星期日");
private String name;
private Week(String name){
this.name = name;
}
public String getName() {
return name;
}
}