------- android培训、java培训、期待与您交流! ----------
枚举
JDK1.5引入了新的类型——枚举。在 Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器编译时就可以控制原程序中的非法值。
1)枚举是一个特殊的类,其中每个元素都是该类的一个实例对象,其中可以定义构造方法,成员变量,普通方法和抽象方法。
2)枚举元素必须位于枚举体中最开始的部分,枚举元素列表后面要有分号与其他成员分隔。把枚举中的成员方法和变量放在美居元素的前面,编译器报告错误。
3)带构造方法的枚举:构造方法必须定义成私有的
4)实现带有抽象方法的枚举,每个元素分别是由枚举的子类来生成的实例对象,这些子类采用类似内部类的方式进行定义。
5)当枚举只有一个成员时,就可以作为一种单利的实现方式
用法一:常量
在JDK1.5之前,我们定义常量都是: public static fianl ....现在有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举还提供了比常量更多的方法。
示例:
public enum Color {
RED,GREEN, BLANK, YELLOW
}
用法二:switch
JDK1.5之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
示例:
public class TrafficLight {
Signal color = Signal.RED;
publicvoid change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum实例。
示例:
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
//成员变量
privateString name;
privateint index;
//构造方法
privateColor(String name, int index) {
this.name = name;
this.index = index;
}
//普通方法
publicstatic String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
publicString getName() {
return name;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getIndex() {
return index;
}
publicvoid setIndex(int index) {
this.index = index;
}
}
用法四:覆盖枚举的方法
示例:toString()方法覆盖的例子
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
//成员变量
privateString name;
privateint index;
//构造方法
privateColor(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法
@Override
publicString toString() {
return this.index+"_"+this.name;
}
}
用法五: 关于枚举集合的使用
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用可以参考JDK文档。
两个小练习:
1.定义一个weekday枚举
代码如下:
public enum WeekDay{
SUN(1),MON(),TUE,WED,THI,FRI,SAT;
private WeekDay(){System.out.println("first");};
private WeekDay(int day){System.out.println("second");};
}
2.定义一个交通灯枚举
代码如下:
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
returnGREEN;
}
},
GREEN(40){
public TrafficLamp nextLamp(){
returnYELLOW;
}
},YELLOW(5){
public TrafficLamp nextLamp(){
returnRED;
}
};
publicabstract TrafficLamp nextLamp();
privateint time;
privateTrafficLamp (int time){this.time= time;};
};
------- android培训、java培训、期待与您交流! ----------