枚举:当程序运行时的数据不是任意的,而是一定范围的值时使用枚举。jdk5以前采用的是自定义的方法,jdk5以后采用枚举的方法。
一、枚举的使用简例
public class Demo{
public void test(){
print(Grade.B);//只能传ABCDE指定的五个值
}
public void print(Grade g){//A B C D E
}
}
//jdk5以前的自定义方法
class Grade{
private Grade(){}
public static final Grade A = new Grade();
public static final Grade B = new Grade();
public static final Grade C = new Grade();
public static final Grade D = new Grade();
public static final Grade E = new Grade();
}
//jdk5以后的枚举法
enum Grade{ A,B,C,D,E;//成绩等级,Grade相当于以前的类}
二、定义枚举的构造函数、字段和方法
//如何让设计出来的枚举拥有构造函数,拥有构造函数自带的方法以封装更多的信息
public class Demo{
public void test(){
print(Grade.B);//只能传ABCDE指定的值
}
public void print(Grade g){//A B C D E
String value = g.getValue();
System.out.println(value);
}
}
enum Grade{//A100-90 B89-80 C79-70 D69-60 E59-0
A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0");
//Grade相当于一个类,下面为类声明了一个有参的构造函数,不同于之前new出来的无参构造函数,所以new出来的对象需要加参数
private String value;//封装每个对象对象的分数
private Grade(String Value){
this.value = value;
}
public String getValue(){
return this.value;
}
}
三、带有抽象方法的枚举
//如何在枚举中设计一个方法,使得调用这个方法时得到中文成绩
public class Demo{
public void test(){
print(Grade.B);//只能传ABCDE指定的值
}
public void print(Grade g){//A B C D E
String value = g.localValue();
System.out.println(value);
}
}
enum Grade{//A100-90 优秀 B89-80良好 C79-70差 D69-60及格 E59-0不及格
A("100-90"){//带有抽象方法的抽象类不能直接new出实例对象,需要在new时实现这个抽象方法
public String localValue(){
return("优秀");
}
}
,B("89-80"){
public String localValue(){
return("良好");
}
}
,C("79-70"){
public String localValue(){
return("差");
}
}
,D("69-60"){
public String localValue(){
return("及格");
}
}
,E("59-0"){
public String localValue(){
return("不及格");
}
};
private String value;//封装每个对象的分数
private Grade(String Value){
this.value = value;
}
public String getValue(){
return this.value;
}
public abstract String localValue();//把方法声明为抽象方法,调用时可以针对不同的数据返回不同的值
}
四、枚举类的特性
1.枚举类也是一种特殊形式的Java类;
2.枚举类中声明的每一个枚举值代表枚举类的一个实例对象;
3.枚举类的构造函数必须是私有的;
4.枚举类可以实现接口、或继承抽象类;
5.若枚举类只有一个枚举值,则可以当作单例设计模式。