一、枚举
1. 枚举的定义
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。枚举本身是一种特殊的类,枚举中的每一个元素都是一个枚举的实例。因此,在比较两个枚举的类型的时候直接用“==”就行。如果有需要还可以在枚举类型中添加一些构造器,方法和域。构造器只是在构造枚举常量的时候被调用。所有的枚举都继承自Enum类。2. 枚举类Enum中的常用方法
int ordinal(); 返回枚举常量的序数(初始常量序数为零)。
String name(); 返回枚举常量的名称。
String toString(); 返回枚举常量的名称。(定义toString方法的返回值)//最有用的一个方法
String getClass(); 返回枚举常量的类。
String getDeclaringClass(); 返回声明枚举的枚举类型的类。
valueOf(enumType,name); 返回带指定枚举类型的枚举常量。
valueOf(name); 返回指定枚举类型的枚举常量。
values(); 返回枚举类型的所有枚举常量。
3. 枚举的使用方法
在枚举中,我们可以定义自己特有的字段,构造函数,以及特有的方法,也可以定义abstract方法,这个时候,在定义枚举值时,需要实现该抽象方法。(1)定义字段
(2)定义带参数的构造函数
(3)定义抽象方法
4.张孝祥老师的枚举实例代码:
import java.util.Date;
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
WeekDay1 weekDay = WeekDay1.MON;
System.out.println(weekDay.nextDay());
WeekDay weekDay2 = WeekDay.FRI;
System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
new Date(300){};
}
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");}
}
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
在这段代码里,有很多的综合知识,以及书本上一笔带过的知识。精华就在交通灯
public enum TrafficLamp{……} <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">的那一段代码中。</span>
枚举实例之间用逗号隔开,最后一个实例可以加分号,如果其后有方法或者域等就必须家分号,每个枚举常量后面的跟一对小括号(),代表调用相关方法,调用的方法由括号内的参数决定,枚举常量后面还可以跟一对大括号{........},此处相当于一个匿名内部类。
最后,老师还讲到了享元设计模式,对于设计模式,我想过一段时间将老师所讲过的所有设计模式做一个总结。