--------- android培训、java培训、期待与您交流! ----------
黑马程序员---高新技术之枚举
枚举:
要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。
1.所有枚举类都继承自java.lang.Enum类,所以,枚举类不可以再继承其他类,但是他可以实现其他接口
2.它不能有public的构造函数(构造函数要私有),这样做可以保证客户代码没有办法新建一个enum的实例。
3.所有枚举值都是public , static ,final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。
4.Enum默认实现了java.lang.Comparable接口。
5.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.
6.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
7.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。
8.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定(枚举元素顺序从0开始)
需要注意的是
1.枚举只有一个成员时,就可以作为一种单例的实现方式。
2.枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
示例代码
public enum WeekDay{
SUN,MON,TUE,WED(1),THI,FRI,SAT;
//注意:
//1.构造方法.必须放在元素列表之后,
//2.如果元素列表后面有东西的话.元素列表后面一定要要分号;
//3.定义枚举的构造方法.一定要被私有修饰
//4.在枚举后面加上()大话号.就表示.创建这个元素指向实例对象的时候使用哪个构造方法.
private WeekDay(){
System.out.println("first");
}
private WeekDay(int day){
System.out.println("second");
}
}