枚举(values()方法、枚举与switch、Enum类、enum和Enum的区别)
一、枚举的定义
枚举也是在JDK1.5之后提出的概念,可以认为是多例设计的一种,只是相较来说更简单,也是因为有了枚举多例模式就受到了冷落,一般很少使用了。枚举也是一种定义有限个对象的结构。
创建枚举要使用enum关键字,隐含了所创建的类都是java.lang.Enum类的子类(java.lang.Enum是一个抽象类),如下:
enum Colors {
BLUE,
RED,
GREED;
}
public class EnumTest {
public static void main(String[] args) {
Colors c = Colors.BLUE;
System.out.println(c);
}
}
BLUE
二、枚举的values()方法
values()方法用于取得枚举对象的所有值,将枚举类转变为一个枚举类型的数组,因为枚举中没有下标,我们没有办法通过下标来快速找到需要的枚举类,这时候,转变为数组之后,我们就可以通过数组的下标,来找到我们需要的枚举类。
enum Colors {
BLUE,
RED,
GREED;
}
public class EnumTest {
public static void main(String[] args) {
List<Colors> list = new ArrayList<Colors>();
for(Colors c : Colors.values()){
list.add(c);
}
System.out.println(list);
}
}
[BLUE, RED, GREED]
三、 枚举与switch结构
JDK1.5后,switch可以使用枚举来作为条件:
enum Colors {
BLUE,
RED,
GREED;
}
public class EnumTest {
public static void main(String[] args) {
Colors c = Colors.BLUE;
switch (c) {
case RED:
System.out.println("红色");
break;
case BLUE:
System.out.println("蓝色");
break;
case GREED:
System.out.println("绿色");
break;
}
}
}
蓝色
四、Enum类
上面定义枚举时,类名前的enum就是代表这个类默认继承Enum类,它有几个比较重要的方法:
- 构造方法:Enum(String name,int ordinal)----------传入名字和序号
- 获得名字:String name()
- 获得序号:int ordinal()
enum Colors {
BLUE,
RED,
GREED;
}
public class EnumTest {
public static void main(String[] args) {
for(Colors c:Colors.values()) {
System.out.println(c.ordinal() + "*****" + c.name());
}
}
}
0*****BLUE
1*****RED
2*****GREED
其中,序号是定义枚举对象的顺序,与定义的顺序一致。
五、enum和Enum的区别
- enum是JDK1.5之后提供的一个关键字,用于定义枚举类;
- Enum是一个抽象类,使用了enum关键字的类就默认继承Enum类。