一、概念
枚举在日常生活中很常见,例如一个人的性别只能是"男"或者"女",一周的星期只能是7天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。
在JDK1.5之前没有枚举类型,那时候一般用接口常量来替代。而使用Java枚举类型enum可以更贴近地表示这种常量。
二、定义
声明枚举时必须使用enum关键字,语法如下
权限修饰符 enum 枚举名称{
枚举成员1,
枚举成员2,
...;
}
// 枚举成员之间使用逗号分隔,最后使用分号结束
例子
// 使用枚举描述性别数据
public enum Sex {
GIRL,
BOY;
}
三、使用
通过枚举类型名直接引用常量即可,例如Sex.BOY、Sex.GRIL
public class Test {
public static void main(String[] args) {
System.out.println(Sex.BOY); // BOY
System.out.println(Sex.GIRL); // GIRL
}
}
四、分析枚举
- 枚举本质上就是最终类
- 枚举常量,就是枚举类的对象,而且是静态的常量
- 有私有的构造方法
- 静态代码
五、枚举中的其他成员
枚举类型也是属于类,允许定义其他成分,比如构造器、成员方法、成员变量等。但是定义的成分一定要在枚举实例之后,而且最后一个枚举实例必须要有分号结束。
比如
public enum Sex {
BOY("男孩"),
GIRL;
// 成员变量
private String msg;
// 构造方法,必须私有
private Sex(){}
private Sex(String msg){
this.msg = msg;
}
// 成员方法
public void show(){
System.out.println(msg);
}
}
- GIRL对象就是由无参构造方法创建的
- BOY是有参构造方法创建的
- 构造方法权限一定是私有的,即使省略也是private权限。
- show方法可以直接用枚举实例调用:Sex.BOY.show();
六、枚举的使用例子
性别的案例
// Sex.java
public enum Sex {
BOY("男孩"),
GIRL;
// 成员变量
private String msg;
// 构造方法,必须私有
private Sex(){}
private Sex(String msg){
this.msg = msg;
}
public String getMsg(){
return this.msg;
}
// 成员方法
public void show(){
System.out.println(msg);
}
}
// Test.java
public class Test {
public static void main(String[] args) {
String sex = Sex.BOY.getMsg();
System.out.println(sex); // 男孩
}
}
季节的案例
// Season.java
public enum Season {
SPRING("春天"),
SUMMER("夏天"),
AUTUMN("秋天"),
WINTER("冬天");
private String type;
Season() {
}
Season(String type) {
this.type = type;
}
@Override
public String toString(){
return type;
}
}
// Test.java
public class Test {
public static void main(String[] args) {
Season sea = Season.SUMMER;
System.out.println(sea); // 夏天
}
}
七、小结
- 枚举本质上是一个final类,继承了Enum类
- 枚举是一个类,可以类中定义成员,比如成员变量、构造方法、成员方法等
- 枚举中的构造方法是私有的,外界无法调用,只能定义枚举常量的时候使用
- 枚举中的实例方法可以直接用枚举常量调用