一、概念
枚举在日常生活中很常见,例如一个人的性别只能是"男"或者"女",一周的星期只能是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类
- 枚举是一个类,可以类中定义成员,比如成员变量、构造方法、成员方法等
- 枚举中的构造方法是私有的,外界无法调用,只能定义枚举常量的时候使用
- 枚举中的实例方法可以直接用枚举常量调用