@java5之前没有枚举,用类实现限定值方法和枚举:
@枚举类具有如下特性:
1,枚举类也是一种特殊形式的Java类。
2,枚举类中声明的每一个枚举值代表枚举类的一个实例对象(例如下边实例中的ABCDE都是实例对象)。
3,与java中的普通类一样,在声明枚举类时,也可以声明属性,方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解,看上图中的第一个类,如果能实例化新的对象,那就不叫枚举了)。
4,枚举类也可以实现接口,或继承抽象类。
5,jdk5中扩展switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型。
6,若枚举类只有一个枚举值,则可以当做单态设计模式使用(单例模式)。
//用单态设计模式定义出了一个类
enum A{
A;
}
@实例应用:枚举的构造函数,方法和字段。枚举的常用方法。
public class Demo_enum {
@Test
public void test(){
System.out.println(Grade.B.getValue()); //这里输出89-80
}
}
//测试枚举的常用方法
@Test
public void test2(){
//下边是枚举Enum类的常用方法
System.out.println(Grade.C.name()); //输出枚举对象的名称,这里输出C
System.out.println(Grade.C.ordinal()); //输出枚举对象所在的位置,索引号
Grade gs[]=Grade.values(); //获取枚举的所有对象,返回一个数组
for(Grade gde:gs){ //遍历数组,输出枚举对象
System.out.println(gde);
}
String str="Y";
Grade g=Grade.valueOf(str); //valueOf方法是将字符串转换为枚举对象。注意字符串必须是枚举对象中有的值
//上边是将Y转换为枚举对象,但是Grade枚举中没有Y这个值,所以转换会报错(抛出异常)。
//什么时候会用到将字符串转换为枚举对象?客户提交表单时,表单提交一般都是字符串,例如男女验证,这里就可以将男女转换为指定枚举对象,如果转换失败,就说明客户提交的资料有问题。
System.out.println(g);
}
enum Grade{
// A,B,C,D,E; //这里这么定义,上边输出C
//也可以向下边定义枚举的构造方法和值
//A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0"); //new5个Grade对象,有点像字典,一个key对应一个value
//下边是带抽象方法的枚举
A("100-90"){
public String localeValue(){ //这个方法,返回分数的优良等情况
return "优";
}
},
B("89-80"){
public String localeValue(){
return "良";
}
},
C("79-70"){
public String localeValue(){
return "一般";
}
},
D("69-60"){
public String localeValue(){
return "差";
}
},
E("59-0"){
public String localeValue(){
return "不及格";
}
};
private String value;
private Grade(String value){ //构造方法,上边new ABCDE对象时,传入字符串值,赋值给this.value
this.value=value;
}
public String getValue(){ //获取指定对象的value值,这里是返回分数
return this.value;
}
public abstract String localeValue(); //抽象方法,声明这个抽象方法,上边实例化对象时,就必须实现该抽象方法
}
@课后练习题:
请编写一个关于星期几的枚举WeekDay,要求:该枚举要有一个方法,调用该方法返回中文格式的星期。
---答案如下:
enum WeekDay{
MON("星期一"),TUE("星期二"),WED("星期三"),THU("星期四"),FEI("星期五"),SAT("星期六"),SUN("星期日");
private String value;
private WeekDay(String value){
this.value=value;
}
public String getValue(){
return value;
}
}
@Test
public void test3(){
System.out.println(WeekDay.MON.getValue()); //返回星期一
}
@总结:
1,枚举的定义,原理和特性。
2,枚举的常用方法和实例应用。