------- android培训、java培训、期待与您交流!----------
可以把枚举看成一个类,但是这个类有些特殊,他的构造方法只能被private修饰,也就是说枚举不能被实例化。不能被实例化的类的内部肯定会有获得这个类对象的方法,而枚举中的元素就是被实例化的对象。
先定义一个最简单的枚举:
public enum Lamp{
RED,GREEN,YELLOW;
}
枚举还可以有自定义的构造方法:
public enum Lamp{
RED(30), //使用的是带参数的构造函数 GREEN(), //使用的是无参数的构造函数 YELLOW;
//和上面的格式一样
private Lamp(){}
private Lamp(int time){System.out.println("灯亮的持续时间为"+time+"秒");}
}
枚举和普通类一样,可又有自己的成员变量和成员方法,比较特殊的是如果是抽象方法那么那些元素必须实现这个抽象函数(采用内部类的方式),这和抽象类是一样的。
public enum Lamp{
RED(30){
public Lamp nextLamp()
{
return GREEN;
}
},
GREEN(){
public Lamp nextLamp()
{
return YELLOW;
}
},
YELLOW{
public Lamp nextLamp()
{
return RED;
}
};
int time;
private Lamp(){}
private Lamp(int time){
this.time = time;
System.out.println("灯亮的持续时间为"+time+"秒");}
public abstract Lamp nextLamp();//打印出下一个灯是什么
}
}
枚举的使用:
枚举的常用方法:
int | ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
String | toString() 返回枚举常量的名称,它包含在声明中。 |
String | name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
static
| valueOf(Class<T> enumType,String name) 返回带指定名称的指定枚举类型的枚举常量。 |
int | compareTo(E o) 比较此枚举与指定对象的顺序。 |
public class Enumdemo {
public static void main(String[] args) {
Lamp lamp1 = Lamp.GREEN;
System.out.println(Lamp.RED.nextLamp());//使用它的函数
System.out.println(Lamp.GREEN.ordinal());
System.out.println(Lamp.GREEN.toString());
System.out.println(Lamp.GREEN.equals(Lamp.YELLOW));//比较次序
//如果想通过枚举的字符串名称获得与之对应的元素对象使用valueOf
Lamp lamp2 = Lamp.valueOf("RED");
//获得所有枚举元素,也可以获得这个数组的长度
Lamp[] lamps = Lamp.values();
System.out.println(lamps.length);
}