------- android培训、java培训、期待与您交流! ----------
什么是枚举?一个变量的值,只能在所给定的某几个确定的值里取(注:此处的值不是基本数据类型的,而是对象类型的值),如果取到这些值之外的值那么就编译失败,这个存放给定值的类就是枚举类了。
比如说星期:只有星期日、星期一、星期二、星期三、星期四、星期五、星期六;性别:男、女;季节:春、夏、秋、冬;交通灯:红、绿、黄......等等。
这些都可以通过建立枚举类来实现。
下边我举个例子:
这就是一个最简单的枚举类
public enum Weekday {
SUN,MON,TUE,WED,THI,FRI,SAT;
}
带有构造方法的枚举
public enum Weekday {
SUN,MON(1),TUE,WED,THI,FRI,SAT;
private Weekday(){System.out.println("1");}
private Weekday(int day){System.out.println("2");}
}
注:1、构造方法必须用private修饰
2、枚举类型的元素必须在最前边,构造方法不能放在元素前边。
3、枚举类型的元素可以加参数,通过参数来确定,在创建这个元素指向的实例对象时候使用的哪个构造方法。
4、如果有参数那么必须写上Weekday()的空参数的构造方法,如果不写会报错。
带有抽象方法的枚举
public enum TrafficLamp{
RED(40){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(60){
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;
}
注:1、父类的抽象方法必须在每个元素的子类里重写nextLamp()
2、构造方法的返回值还是自己这个类的类型
3、每个元素跟参数,表示用父类的哪一个构造方法
下边还有一些枚举类的静态方法
public class EnumTest {
public static void main(String[] args) {
Weekday wd = Weekday.FRI;
System.out.println(wd); //打印结果:FRI wd的引用指向枚举类型的FRI,此处省略了toString()方法
System.out.println(wd.name()); //打印结果:FRI 元素的名字
System.out.println(wd.ordinal()); //打印结果:5 元素在所有元素中的顺
System.out.println(wd.getClass()); //打印结果:Weekday 元素的返回类型
System.out.println(wd.values()); //返回所有元素的一个数组,可以通过加强for对元素进行遍历
System.out.println(wd.values().length); //打印结果:枚举类中元素的个数
System.out.println(wd.valueOf("SUN")); //打印结果:返回枚举中"SUN"这个元素对象
}
public enum Weekday {
SUN,MON,TUE,WED,THI,FRI,SAT;
}
}