您的位置:首页 > 编程语言 > Java开发

JDK5新特性:枚举(Enum)

2015-08-06 13:49 405 查看

一、枚举的概述。

枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有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语句中的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: