二十四、枚举
1、概述
1.1 引入
枚举在日常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是7天中的一个等。类似这种当一个变量有几种固定取值时,就可以将它定义为枚举类型。
在JDK 1.5之前没有枚举类型,那时候一般用接口常量来替代。而使用Java枚举类型enum可以更贴近地表示这种常量。
1.2 定义枚举
声明枚举时必须使用enum关键字
格式:
权限修饰符 enum 枚举名称{
枚举项1,枚举项2...;
}
/*枚举项之间用逗号分隔,最后使用分好结束*/
例如:
public enum Sex{
GIRL,BOY;
}
1.3 枚举使用
- 通过枚举名直接引用枚举项即可;例如:Sex.BOY
- 注意:每个枚举项都相当于枚举的对象!!!
2、枚举中的其他成分
2.1 枚举的本质
枚举其实本质上是一个类,每一个枚举项是本枚举类类型的一个对象。我们可以使用JDK提供的反编译命令,将枚举的字节码进行 查看。
-
在CMD中找到字节码所在路径,然后执行:
javac -p 字节码文件名 -
我们以之前所写的Sex枚举为例,反编译后结果如下:
final class Sex extends java.lang.Enum<_Sex>{
public static final Sex BOY;
public static final Sex GIRL;
public static final Sex[] $VALUES;
// 将所有的枚举对象返回
public static Sex[] values();
// 根据枚举的常量名字符串,转换为枚举对象
public static Sex valueOf(java.lang.String);
private Sex(); //构造方法
static {}; //静态代码块
}
由上得知:
- 枚举本质上就是最终类
- 枚举项,就是枚举类的对象,而且是静态的常量
- 有私有的构造方法
- 有静态代码块
- 继承 lang 包下的的 Enum
2.2 代码使用
public enum Sex{
//枚举项,每一个枚举项都是此枚举的对象
GIRL("女"),BOY("男");
private String name; //私有方法
//构造方法:注意只能是私有方法
private Sex(){}
//有参构造
private Sex(String name){
this.name = name;
}
//打印name变量值
public String getSex(){
return name;
}
}
class EnumTest{
public static void main(String args){
Sex.BOY.getSex(); //男
Sex.GIRL.getSex(); //女
}
}
3、小结
-
枚举类在第一行罗列若干个枚举对象。(多例)
-
第一行都是常量,存储的是枚举类的对象。
-
枚举是不能在外部创建对象的,枚举的构造器默认是私有的。
-
枚举通常用于做信息的标志和分类。

浙公网安备 33010602011771号