------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、枚举类型简介
1)枚举类型让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错
定义一个枚举类型的类
public enum EnumWeekday{
// 枚举元素必须位于枚举体中的最开始部分,且以封号结尾
MON,TUS,WED,THU,FRI,SAU,SU;
}
2)另外:枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,每次使用都会调用相对应的构造方法
进行初始化,如果没写构造方法,就使用默认的无参构造器。
对上面的代码修改如下:
public enum EnumWeekday{
//在元素对象后面跟上括号,枚举元素后面括号里的参数有无和多少,就能确定对象创建时使用的是哪个构造方法
MON(1),TUS(),WED,THU,FRI,SAU,SUN();
private EnumWeekday(){System.out.println("first");};
private EnumWeekday(int n){System.out.println("second");};
}
上面的代码修改后,每次使用枚举类型中的元素时,就会调用相应的已写好的构造方法进行初始化。
2、枚举的高级运用
1)枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
定义一个类,包括成员变量,自定义的构造方法,抽象方法和内部方法的实现。
public enum TrafficLamp{
//调用父类的构造方法,并且匿名内部类实现TrafficLamp的子类方法,子类方法返回的是枚举元素,RED是一个实例对象,没有参数或者参数为空需要系统由默认构造器创建
RED(10){
@Override
public TrafficLamp next() {
return GREEN;
}
},GREEN(20){
@Override
public TrafficLamp next() {
return YELLOW;
}
},YELLOW(30){
@Override
public TrafficLamp next() {
return RED;
}
};
private int time;
//构造方法必须是私有的
private TrafficLamp(int time){this.time = time;}
//在枚举类中定义抽象方法,让枚举类的子类实现这个方法,此处我们用的是匿名内部类
public abstract TrafficLamp next();
}
上面的枚举类型的定义时,使用抽象方法next()的定义,且在代码中实现了抽象方法next(),抽象的next方法:每个元素
可以通过调用next()
得到下一个枚举类型的实例对象,枚举元素内部实现子类采用类似内部类的方式进行定义。
2)枚举只有一个成员时,就可以作为一种单例的实现方式,因为枚举的构造参数是私有的,定义了一个元素的枚举,就是单例的。
如下:
public enum EnumSingle{
ONO;
}