Java枚举

来源:互联网 发布:网络配线架怎么打 编辑:程序博客网 时间:2024/04/30 05:34

 

什么是枚举?

枚举相当于一个类,枚举中的元素相当于类中的实体对象

 

单例可以用枚举来实现吗?

当枚举中的元素只有一个时,该枚举就可以理解成单例

 

枚举的特点:

1.所有枚举类都继承自java.lang.Enum类,所以,枚举类不可以再继承其他类,但是他可以实现其他接口

 

2.它不能有public的构造函数(构造函数要私有),这样做可以保证客户代码没有办法新建一个enum的实例。

 

3.所有枚举值都是public , static ,final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。

4.Enum默认实现了java.lang.Comparable接口。

5.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

6.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。

7.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

8.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定(枚举元素顺序从0开始)

 

代码如下:

import java.util.EnumMap;import java.util.EnumSet;public class LightTest {// 1.定义枚举类型public enum Light {//利用构造函数传参RED(1), GREEN(3), YELLOW(2);// 定义私有变量private int nCode;// 构造函数,枚举类型只能为私有private Light(int _nCode) {this.nCode = _nCode;}@Overridepublic String toString() {return String.valueOf(this.nCode);}}/** * @param args */public static void main(String[] args) {// 1.遍历枚举类型System.out.println("演示枚举类型的遍历 ......");testTraversalEnum();// 2.演示EnumMap对象的使用System.out.println("演示EnmuMap对象的使用和遍历.....");testEnumMap();// 3.演示EnmuSet的使用System.out.println("演示EnmuSet对象的使用和遍历.....");testEnumSet();}/** * 演示枚举类型的遍历 */private static void testTraversalEnum() {Light[] allLight = Light.values();for (Light aLight : allLight) {System.out.println("当前灯name:" + aLight.name());System.out.println("当前灯ordinal:" + aLight.ordinal());System.out.println("当前灯:" + aLight);}}/** * 演示EnumMap的使用,EnumMap跟HashMap的使用差不多,只不过key要是枚举类型 */private static void testEnumMap() {// 1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型EnumMap<Light, String> currEnumMap = new EnumMap<Light, String>(Light.class);currEnumMap.put(Light.RED, "红灯");currEnumMap.put(Light.GREEN, "绿灯");currEnumMap.put(Light.YELLOW, "黄灯");// 2.遍历对象for (Light aLight : Light.values()) {System.out.println("[key=" + aLight.name() + ",value="+ currEnumMap.get(aLight) + "]");}}/** * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容<BR/> * 可以使用allOf方法 */private static void testEnumSet() {EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);for (Light aLightSetElement : currEnumSet) {System.out.println("当前EnumSet中数据为:" + aLightSetElement);}}}


 

 

 

原创粉丝点击