javaweb学习总结三(枚举)

时间:2023-03-09 23:04:29
javaweb学习总结三(枚举)

一:枚举的概念

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

javaweb学习总结三(枚举)

二:定义枚举类

1:定义枚举,其中Grade枚举可以看做类,A、B、C、D、E可以看做对象,因为它定义了有参数的构造方法,所以

对象后面必须带参数。

 // 定义枚举Grade
enum Grade {
A("90-100"), B("80-90"), C("70-80"), D("60-70"), E("小于60");
private String value; //成员变量 private Grade(String value) { //构造方法
this.value = value;
} public String getValue() {
return this.value;
}
}

2:调用枚举

     @Test
public void testEnum() {
print(Grade.A);
} public void print(Grade g) { //传参为枚举
System.out.println(g.getValue());
}

三:带抽象方法的枚举类

1:定义枚举

 // 定义枚举Grade
enum Grade {
A("90-100") {
@Override
public String localeValue() {
return "优秀";
}
},
B("80-90") {
@Override
public String localeValue() {
return "良好";
}
},
C("70-80") {
@Override
public String localeValue() {
return "中等";
}
},
D("60-70") {
@Override
public String localeValue() {
return "及格";
}
},
E("小于60") {
@Override
public String localeValue() {
return "不及格";
}
};
private String value; // 成员变量 private Grade(String value) { // 构造方法
this.value = value;
} public String getValue() {
return this.value;
} public abstract String localeValue(); // 定义抽象方法
}

2:调用

 @Test
public void testEnum() {
print(Grade.A);
} public void print(Grade g) { // 传参为枚举
System.out.println(g.getValue());
System.out.println(g.localeValue());
}

四:枚举中常用的方法

1:枚举类的构造函数必须是私有的,因为枚举是向程序传入特定的数据,如果是构造是public,那么

程序就会new很多对象,违反枚举的意义。

2:枚举可以作为单例设计模式,如下:

 enum Year {
A; // 只有一个对象,构造函数私有,不能实例化
} public class Year {
private final Year y = new Year(); // 定义一个对象 private Year() { // 私有化构造方法 } public static Year getInstance() {
return y;
}
}

javaweb学习总结三(枚举)

3:常用api

 @Test
public void testEnumApi() {
System.out.println(Grade.A.name()); // 输出名称
System.out.println(Grade.A.ordinal());// 输出序号
String str = "A"; // 将字符串转换为枚举
Grade g = Grade.A.valueOf(str);
System.out.println(g);
// 获取所有的枚举对象
Grade[] grades = Grade.values();
for (Grade grade : grades) {
System.out.println(grade);
} }

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

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

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