一:枚举的概念
定义特定的数据,尤其像一些状态位。
二:定义枚举类
1:定义枚举,其中Grade枚举可以看做类,A、B、C、D、E可以看做对象,因为它定义了有参数的构造方法,所以
对象后面必须带参数。
1 // 定义枚举Grade 2 enum Grade { 3 A("90-100"), B("80-90"), C("70-80"), D("60-70"), E("小于60"); 4 private String value; //成员变量 5 6 private Grade(String value) { //构造方法 7 this.value = value; 8 } 9 10 public String getValue() { 11 return this.value; 12 } 13 }
2:调用枚举
1 @Test 2 public void testEnum() { 3 print(Grade.A); 4 } 5 6 public void print(Grade g) { //传参为枚举 7 System.out.println(g.getValue()); 8 }
三:带抽象方法的枚举类
1:定义枚举
1 // 定义枚举Grade 2 enum Grade { 3 A("90-100") { 4 @Override 5 public String localeValue() { 6 return "优秀"; 7 } 8 }, 9 B("80-90") { 10 @Override 11 public String localeValue() { 12 return "良好"; 13 } 14 }, 15 C("70-80") { 16 @Override 17 public String localeValue() { 18 return "中等"; 19 } 20 }, 21 D("60-70") { 22 @Override 23 public String localeValue() { 24 return "及格"; 25 } 26 }, 27 E("小于60") { 28 @Override 29 public String localeValue() { 30 return "不及格"; 31 } 32 }; 33 private String value; // 成员变量 34 35 private Grade(String value) { // 构造方法 36 this.value = value; 37 } 38 39 public String getValue() { 40 return this.value; 41 } 42 43 public abstract String localeValue(); // 定义抽象方法 44 }
2:调用
1 @Test 2 public void testEnum() { 3 print(Grade.A); 4 } 5 6 public void print(Grade g) { // 传参为枚举 7 System.out.println(g.getValue()); 8 System.out.println(g.localeValue()); 9 }
四:枚举中常用的方法
1:枚举类的构造函数必须是私有的,因为枚举是向程序传入特定的数据,如果是构造是public,那么
程序就会new很多对象,违反枚举的意义。
2:枚举可以作为单例设计模式,如下:
1 enum Year { 2 A; // 只有一个对象,构造函数私有,不能实例化 3 } 4 5 public class Year { 6 private final Year y = new Year(); // 定义一个对象 7 8 private Year() { // 私有化构造方法 9 10 } 11 12 public static Year getInstance() { 13 return y; 14 } 15 }
3:常用api
1 @Test 2 public void testEnumApi() { 3 System.out.println(Grade.A.name()); // 输出名称 4 System.out.println(Grade.A.ordinal());// 输出序号 5 String str = "A"; // 将字符串转换为枚举 6 Grade g = Grade.A.valueOf(str); 7 System.out.println(g); 8 // 获取所有的枚举对象 9 Grade[] grades = Grade.values(); 10 for (Grade grade : grades) { 11 System.out.println(grade); 12 } 13 14 }
将字符串转换为枚举使用场景:
客户端表单提交时,提交的数据(例如:性别)是字符串,在服务器端获取数据时,可以转换为枚举,如果能够
转换,则验证通过;如果不能,则抛出异常,告知提交失败!