javaweb学习总结三(枚举)

一:枚举的概念

定义特定的数据,尤其像一些状态位。

二:定义枚举类

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     }

将字符串转换为枚举使用场景:

客户端表单提交时,提交的数据(例如:性别)是字符串,在服务器端获取数据时,可以转换为枚举,如果能够

转换,则验证通过;如果不能,则抛出异常,告知提交失败!

原文地址:https://www.cnblogs.com/warrior4236/p/5705658.html