这两天工作中,需要用到枚举;突然感觉,脑袋宕机了,枚举到底咋用啊,赶快google了一番;
一.枚举类型
引用:在JDK1.5之前,Java语法中没有枚举类型,定义常量都是直接用public static final ...来修饰实现.
自JDK1.5以后,Java语法添加了Enum的概念,可以把相关的常量分组到一个枚举类型里,而且提供了比常量更多的方法.
例如: 表示四季:春/夏/秋/冬
public enum season{
SPRING,
SUMMER,
AUTUMN,
WINTER
}
经过javac编译以后,得到season.class,在通过javap反编译,得到class内部字节码的实现过程.
例如:>javap season -c >>season.txt 注意:此处season生气.class后缀,结果输出到season.txt文本中.
得到结果:
Compiled from "season.java"
public final class season extends java.lang.Enum{
public static final season SPRING;
public static final season SUMMER;
public static final season AUTUMN;
public static final season WINTER;
public static season[] values();
public static season valueOf(java.lang.String);
static {};
}
差不多可以知道,我们定义的枚举类型,最终都转换成class,并继承java.lang.Emum,并且枚举的字段也是用public static final...来实现的,
values(),valueOf继承自java.lang.Enum类
当然,枚举的作用不仅仅局限于此,因为enum最终解释为一个类,我们可以再类中添加构造函数,方法等.
比如L:上面的枚举中,默认情况下SPRING对应0,SUMMER对应1,AUTUMN对应2,WINTER对应3;
但是,大多数情况下,枚举设置并非都是0,1,2,3..等等.
public enum season{
SPRING(10), //调用私有构造方法
SUMMER(20), //调用私有构造方法
AUTUMN(30), //调用私有构造方法
WINTER(40); //调用私有构造方法
private final int value;
public int getValue(){
return this.value;
}
private season(int value){
this.value=value;
}
}
反编译以后,得到:
Compiled from "season.java"
public final class season extends java.lang.Enum{
public static final season SPRING;
public static final season SUMMER;
public static final season AUTUMN;
public static final season WINTER;
public static season[] values();
public static season valueOf(java.lang.String);
public int getValue();
static {};
}