一、枚举的概述。
枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。
回想单例设计模式:单例类是一个类只有一个实例
那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类。
二、枚举类的常用方法。
- int compareTo(E o)
比较此枚举与指定对象的顺序。 - String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。 - int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 - String toString()
返回枚举常量的名称,它包含在声明中。 - T valueOf(Class type,String name)
返回带指定名称的指定枚举类型的枚举常量。 - values()
此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便。
三、枚举的使用。
package com.hkddy8.demo1;
/*
* 手动定义枚举类
*/
public class EunmDemo {
public static void main(String[] args) {
//测试
Lamp l1 = Lamp.RED;
System.out.println(l1);
Lamp l2 = Lamp.GREEN;
System.out.println(l2);
Lamp l3 = Lamp.YELLW;
System.out.println(l3);
// 打印的都是地址值
}
}
class Lamp{
// 私有化构造方法让外界不能无限的去创建对象
private Lamp(){}
// 创建几个实例,用于创建对象
public static final Lamp RED = new Lamp();
public static final Lamp GREEN = new Lamp();
public static final Lamp YELLW = new Lamp();
}
由于自己定义一个枚举类,比较麻烦,所以java就提供了枚举类供我们使用。
java.lang包下的 Enum类
格式是:只有枚举项的枚举类
public enum 枚举类名 {
枚举项1,枚举项2,枚举项3…;
}
代码体现:
public enum TrafficLamp {
// 枚举项
RED, GREEN, YELLW;
}
// 测试类
public class TrafficLampTest {
public static void main(String[] args) {
TrafficLamp t1 = TrafficLamp.RED;
System.out.println(t1);
TrafficLamp t2 = TrafficLamp.GREEN;
System.out.println(t2);
TrafficLamp t3 = TrafficLamp.YELLW;
System.out.println(t3);
// 打印的是枚举项常量的名称,说明Enum类重写了toString方法
}
}
带参构造的使用:
public enum TrafficLamp {
// 枚举项
RED(30), GREEN(40), YELLW(5);
private int time;
// 提供带参构造
private TrafficLamp(int time){
this.time = time;
}
public int getTime(){
return time;
}
// 测试类
public class TrafficLampTest {
public static void main(String[] args) {
TrafficLamp t1 = TrafficLamp.RED;
System.out.println(t1);
System.out.println(t1.getTime());
TrafficLamp t2 = TrafficLamp.GREEN;
System.out.println(t2);
System.out.println(t2.getTime());
TrafficLamp t3 = TrafficLamp.YELLW;
System.out.println(t3);
System.out.println(t3.getTime());
}
}
抽象方法的使用:
public enum TrafficLamp {
// 枚举项
RED(30) {
@Override
public TrafficLamp nextLamp() {
return TrafficLamp.GREEN;
}
}, GREEN(40) {
@Override
public TrafficLamp nextLamp() {
return TrafficLamp.YELLW;
}
}, YELLW(5) {
@Override
public TrafficLamp nextLamp() {
return TrafficLamp.RED;
}
};
private int time;
// 提供带参构造
private TrafficLamp(int time){
this.time = time;
}
public int getTime(){
return time;
}
// 提供一个抽象方法,用于获取下个灯
public abstract TrafficLamp nextLamp();
}
// 测试类
public class TrafficLampTest {
public static void main(String[] args) {
TrafficLamp t1 = TrafficLamp.RED;
// 调用方法
TrafficLamp l1 = t1.nextLamp();
System.out.println(l1);
TrafficLamp t2 = TrafficLamp.GREEN;
// 调用方法
TrafficLamp l2 = t2.nextLamp();
System.out.println(l2);
TrafficLamp t3 = TrafficLamp.YELLW;
// 调用方法
TrafficLamp l3 = t3.nextLamp();
System.out.println(l3);
//打印结果
// GREEN
// YELLW
// RED
}
}
四、使用枚举的注意事项。
定义枚举类要用关键字enum
所有枚举类都是Enum的子类
枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
枚举类也可以有抽象方法,但是枚举项必须重写该方法
枚举在switch语句中的使用