Java枚举

 

什么是枚举?

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

 

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

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

 

枚举的特点:

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;
}

@Override
public 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);
}

}
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值