枚举(Enum)
随着时间的越来越少,现在学习有点凌乱了。。。今天看了张老师的基础加强,第二遍了思路比较清晰,下面是关于枚举的一些我的学习笔记和自己的理解。
枚举存在的原因:
枚举就是让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,这样,枚举就可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标,枚举的出现就解决了这类问题。
关于枚举:
枚举就是一个特殊的类,用普通的类也可以模拟枚举的功能。
枚举的成员就是这类的实体对象。枚举袁术必须位于枚举体中的最开始部分,枚举元素列表后面要用“;”结束,以便于与其他成员进行分开。
构造方法只能私有化,不能让外部调用它的创建对象,也可以定义带有参数列表的构造函数,只要用到枚举类,成员变量就会被初始化,构造方法就会执行。
如何用带有参数的构造方法对枚举类的实例对象进行初始化呢?
在枚举元素后面制定对应的参数就会用带有相应参数的构造函数进行初始化。
提示:枚举元素后面加不加()都是用空参数构造函数进行初始化。
枚举的方法摘要:
方法摘要 | ||
boolean | ||
getDeclaringClass() | ||
name() | ||
int | ordinal() | |
toString() | ||
static
| valueOf(Class<T> enumType, String name) |
枚举的基本应用:
定义一个星期几的枚举,并代用nextDay方法。
public Enum WeekDay
{
SUNDAY,MONDAY;
public WeekDay nextDay()
{
if(this == SUNDAY)
return MONDAY;
else
return SUNDAY;
}
}
枚举的高级应用:
定义一个交通灯的枚举,带有参数的构造函数和抽闲的nextLamp方法。
public Enum TrafficLamp
{
RED(45)//相当于内部类
{
//复写父类的抽象方法
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(60)
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5)
{
public TrafficLamp nextLamp()
{
return RED;
}
};
private int waitTime;
private TrafficLamp(int waitTime)//带有参数的构造函数
{
this.waitTime = waitTimewaitTime;
}
public abstract TrafficLamp nextLamp();//抽象方法
}