枚举类具有如下特性:
a. 枚举类是一种特殊形式的java类
b. 枚举类中声明的每一个枚举值代表枚举类的一个实例对象
c. 与java中的普通类一样,在声明枚举类时,也可以声明属性.方法和构造函数,但枚举类的构造函数必须为私有的,否则报错.
原因:声明为枚举类型是为了值固定,如果构造公有了,岂不是南辕北辙.
e. 枚举类也可以说实现接口或继承 抽象类
f.JDK5中扩展了switch语句,它除了可以接收int.byte.char.short外,还可以接收一个枚举类型.
g.若枚举只有一个枚举值,则可以当做单态设计模式使用的!
1.枚举的作用
一些程序在运行时,它的数据不能是任意的,而必须是一定范围内的值,JDK5.0之后采用枚举来解决这种问题.
JDK新增了enum关键字用于定义枚举类.
2.枚举的定义
枚举相当于一个类;
枚举中的数据相当于类中的对象.
enum action{ //class
A,B,C,D,E; //Object
}
public void Action(action a){} //只能传入A,B,C,D,E
3.枚举中构造函数,字段和方法的定义
enum Grade {
A("90-100") , //定义有参的枚举对象
B("89-80") ,
C("79-70") ,
D("69-60") ,
E("59-0") ;
//字段
private String score;
//有参构造函数
private Grade(String score) {
this.score = score;
}
//获得枚举对象中的值
public String getScore() {
return this.score;
}
}
4.带抽象方法的枚举
enum Grade {
//实现枚举中的抽象方法,使得每个枚举对象有具体的实现
A("90-100") {
public String localScore() {
return "very good!";
}
},
B("89-80") {
public String localScore() {
return "良好";
}
},
C("79-70") {
public String localScore() {
return "一般";
}
},
D("69-60") {
public String localScore() {
return "及格";
}
},
E("59-0") {
public String localScore() {
return "重读吧!";
}
};
// 字段
private String score;
// 有参构造函数
private Grade(String score) {
this.score = score;
}
// 方法
public String getScore() {
return this.score;
}
//定义为抽象方法,可以针对每一个枚举对象获得不同的数据
public abstract String localScore();
}
5.枚举小练习
package cn.itcast;
import org.junit.Test;
public class EnumDemo {
@Test
public void test() {
print(weekday.Fou);
//枚举的调用
public void print(weekday w) {
String china = w.getChina();
System.out.println(china);
}
}
enum weekday {
Mon("星期一"), Tue("星期二"), Tir("星期三"), Fou("星期四"), Fri("星期五"), Sat("星期六"), Sun(
"星期天");
private String china;
private weekday(String china) {
this.china = china;
}
public String getChina() {
return china;
}
}
6.枚举的小知识点
String | name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
int | ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
String | toString() 返回枚举常量的名称,它包含在声明中。 |
static
| valueOf(Class<T> enumType,String name) 返回带指定名称的指定枚举类型的枚举常量。 |
API中没有的一个方法,但在java中存在.
枚举数组 values().