一、为什么要有枚举?
C语言作为编程语言的“鼻祖”,里面是有枚举的。java作为面向对象的语言,一开始在设计时想的是要抛弃枚举的,但是随着使用的人数逐渐增多,就不得不将枚举从新增加到java中。于是在JDK1.5中引入枚举。
为什么使用的人多了就得将枚举加入java中?举个例子:假如要定义周一到周日对应的数字,有的人想周一用1表示,但是有的人想周日用1表示。人少的情况下还好解决,可以一旦人多了就出现问题了。所以就得引入枚举结局问题。
二、枚举的作用
用了枚举就相当于制定了一种规则,规定某个类型的变量只能为一个固定的值。这样别人在引用的使用,如果不按照规矩来,编译器就会报错。
三、枚举的使用
枚举的定义使用enum关键字。枚举中定义成员变量时,成员变量必须位于最前面,换句话说就是成员变量前面面不能有任何方法。枚举的构造方法必须为私有的。有点类似单例。
简单的使用1(带有构造方法):
public class Enum {
public static void main(String[] args) {
WeekDay wee = WeekDay.MON;
System.out.println(wee); // 自动调用toString方法
System.out.println(wee.name()); // 和toString的返回结果相同
System.out.println(wee.ordinal()); // 返回在枚举中的位置,从0开始
System.out.println(WeekDay.valueOf("SUN")); // 枚举的静态方法
System.out.println(WeekDay.values().length);
}
// 定义一个简单的枚举
public enum WeekDay{
// 成员变量后面跟(),表示调用无参构造方法。如果里面有参数,根据参数的类型和个数调用对应的有参构造函数
SUN(),MON(1),TUE,WED,THI,FRI,SAT;
// 构造方法必须放在常量声明后面。并且必须为私有的。
private WeekDay() {System.out.println("first");}
private WeekDay(int i) {System.out.println("second");}
}
}
简单使用2:
定义一个枚举(带有抽象方法):
public enum TrafficLamp{
RED(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},GREEN(30){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},YELLOW(5){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
// 枚举中的成员代表的是一个类对象,所以就得实现抽象方法
public abstract TrafficLamp nextLamp();
private TrafficLamp(int time){this.time = time;}
private int time;
}
测试:
public static void main(String[] args) {
TrafficLamp green = TrafficLamp.GREEN;
System.out.println(green.nextLamp()); // yellow
System.out.println(green.time);
}