枚举类
1 枚举的需求范围
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值
比如: 方向 , 性别 、 季节 、 星期......
2 枚举类的定义格式:
enum 类名{
//枚举值
}
3 枚举要注意的细节:
1. 枚举类也是一个特殊的类。
将枚举类编译,会存在以 .class 为后缀的文件
2. 枚举值默认的修饰符是public static final。
假如我自定义一个性别枚举类
enum Sex{ man,woman; }
那么其中的 man 其实相当于 public static final Sex man = new Sex();
3. 枚举值就是枚举值所属的类的类型,枚举值是指向了本类的对象的。
参考2
4. 枚举类的构造方法默认的修饰符是private的。
enum Sex{ man,woman; private Sex(){ } }
5. 枚举类可以定义自己的成员变量与成员函数。
1 enum Sex{ 2 man,woman; 3 4 private Sex(){ 5 6 } 7 8 String value;//成员变量 9 public void getValue(){ 10 System.out.println("value: " + value); 11 } 12 }
6. 枚举类自定义带参构造函数时,枚举值需要传参。
1 enum Sex{ 2 man("男"),woman("女"); 3 4 private Sex(String value){ 5 this.value = value; 6 } 7 8 String value;//成员变量 9 public void getValue(){ 10 System.out.println("value: " + value); 11 } 12 }
7. 枚举类可以存在抽象的方法,但是枚举值必须要实现抽象的方法。
1 enum Sex{ 2 man("男"){ 3 4 @Override 5 public void run() { 6 System.out.println("男人再跑!"); 7 } 8 9 },woman("女"){ 10 @Override 11 public void run() { 12 System.out.println("女人再跑!"); 13 } 14 }; 15 16 public abstract void run(); 17 18 // private Sex(String value){ 19 // this.value = value; 20 // } 21 // 22 // String value;//成员变量 23 // 24 // public void getValue(){ 25 // System.out.println("value: " + value); 26 // } 27 28 }
8. 枚举值必须要位于枚举类的第一个语句。
注意: JDK1.5才有枚举的哦
完整代码
1 enum Sex{ 2 man("男"){ 3 4 @Override 5 public void run() { 6 System.out.println("男人再跑!"); 7 } 8 9 },woman("女"){ 10 @Override 11 public void run() { 12 System.out.println("女人再跑!"); 13 } 14 }; 15 16 public abstract void run(); 17 18 private Sex(String value){ 19 this.value = value; 20 } 21 22 String value;//成员变量 23 24 public void getValue(){ 25 System.out.println("value: " + value); 26 } 27 28 } 29 30 public class Demo4 { 31 public static void main(String[] args) { 32 Sex sex = Sex.man; //获取到了枚举类的对象 33 sex.getValue(); 34 35 sex.run(); 36 } 37 }