枚举
枚举就是要让某个类的变量取值只能是其规定好的其中一个。否则编译不过去。枚举可以让编译器在编译的时候就控制程序中的非法值。普通类变量无法实现这个效果。
枚举一开始是在C里面才有的,JAVA中没有,后来java用的人多了,JAVA设计者又把枚举加入进来。
枚举类设置方法
1、私有构造方法
2、每个元素分别要用共有的静态成员变量表示。例如:public static final
3、可以有若干公有方法或抽象方法。
举例:
定义一周当中,星期日用一个数字表示,那么有可能是几呢?为了统一规范。我们可以用枚举方法把这个定义约束,让调用者只能按照规范操作。
public class WeekDay
{
private WeekDay(){};
public final static WeekDay SUN= new WeekDay(); //定义了星期日的对象
public final static WeekDay MON= new WeekDay(); //定义了星期一的对像
// 注意:每个枚举对象都是一个对象。
}
那么,在新调用的weekday对象的时候,就只能写成
WeekDay weekday = WeekDay.SUN;
如果想给weekday对象设置其他的值,则不行,例如:
WeekDay weekday = 7; //这样写就会报错。因为已经在上面把构造方法定义成私有,并且制定了具体的对象值。
定义toString 方法,来告诉调用者都有什么类
public String toString()
{
return this==SUN?"SUN":"MON" //如果调用SUN变量,则返回MON变量
}
当然,以上是用普通类模拟枚举的实现原理,为了是让大家搞明白枚举类的原理。
实际我们自己使用的时候很简单。不用上面那么麻烦。
直接使用enum修饰这个类
public enum WeekDay
{
SUN,MON,TUE,WED,THI,FRI,SAT //这里每一个都是对象,创建时候都调用构造方法
private WeekDay(){ };//构造方法1
private WeekDay(int a){ };//构造方法2
}
使用enum定义的枚举类注意事项
1、类中的元素列表必须放在第一行。
2、枚举的构造方法必须是私有的。
3、在枚举类中第一行,每一个定义的元素,都是一个常量,因为常量在类初始化的时候就自动会先实例化常量,优先于其他对象的构造。
引用或创建时,都调用这个枚举类的构造方法。
如果在后面加上括号,并且传入值,就会调用不同的构造方法,跟普通类一样。
例如:
public enum WeekDay
{
SUN(1),MON,TUE,WED,THI,FRI,SAT //这里的sun(1)就会调用下面的 构造方法2
private WeekDay(){ };//构造方法1
private WeekDay(int a){ };//构造方法2
}
同时,枚举类里面的元素可以创建自己的内部类方法,来调用父类的方法。
例如:
public enum WeekDay
{
SUN(){
publicWeekDay XXXX()//调用了下面的抽象方法
{ return null};
}
,MON()
{
publicWeekDay XXXX()
{ return null};
}
private WeekDay(){ };//构造方法1
public abstract WeekDay XXXX(){};
}