1.什么是枚举类型
枚举其实就是特殊的常量类, 且构造方法被默认和强制是私有。
java.lang.Enum是在JDK1.5定义的. 定义为:
pubulic abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable{...}
枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是默认继承Object类,因此枚举类不能显示继承其他父类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。
关于enum与Enum的区别可以简单总结以下两点: 1).enum 是一个关键字,Enum是一个抽象类 2).用enum关键字定义的枚举类就相当于继承了Enum抽象类.
根据编程规范,枚举类型成员名称需要全大写, 多个单词组成的,中间使用下划线隔开。
例如:定义一个颜色枚举类型。
public enum Colors {
RED,GRENN,BLUE,BLACK,WHITE;
}
2.枚举类型的使用
在switch-case语句中经常会判断枚举类型变量。 例如:
public enum Colors {
RED,GREEN,BLUE,BLACK,WHITE;
}
public class EnumerationDemo {
public static void main(String[] args) {
Colors color1 = Colors.BLUE;
switch (color1) {
case RED:
System.out.println("颜色是红色");
break;
case GREEN:
System.out.println("颜色是绿色");
break;
case BLUE:
System.out.println("颜色是蓝色");
break;
case BLACK:
System.out.println("颜色是黑色");
break;
case WHITE:
System.out.println("颜色是白色");
break;
default:
System.out.println("其它颜色");
break;
}
}
}
运行结果:
颜色是蓝色
也可以使用Enum 来声明枚举类型变量,上面例子改写如下:
public enum Colors {
RED,GREEN,BLUE,BLACK,WHITE;
}
public class EnumerationDemo {
public static void main(String[] args) {
Enum color1 = Colors.BLUE;
if(color1 == Colors.RED){
System.out.println("颜色是红色");
}else if(color1 == Colors.GREEN){
System.out.println("颜色是绿色");
}else if(color1 == Colors.BLUE){
System.out.println("颜色是蓝色");
}else if(color1 == Colors.BLACK){
System.out.println("颜色是黑色");
}else if(color1== Colors.WHITE){
System.out.println("颜色是白色");
}else{
System.out.println("其它颜色");
}
}
}
运行结果:
颜色是蓝色
注意:枚举类型中定义的每一个枚举成员,都可以理解为一个静态的常量对象。 例如:RED 等同于 public static final Color red = new Color(0); 而且每一个枚举类型成员都有一个整型编号,默认从0开始。比如:RED=0,GREEN=1,BLUE=2. 可以使用ordinal()获取编号。
通过代码测试如下:
public enum Colors {
RED,GREEN,BLUE,BLACK,WHITE;
}
public class EnumerationDemo {
public static void main(String[] args) {
Colors color1 = Colors.RED;
Colors color2 = Colors.WHITE;
System.out.println(color1.ordinal());
System.out.println(color2.ordinal());
}
}
运行结果:
0
4
3.自定新的构造方法
枚举类型也可以自定义新的构造方法,但是所有构造方法默认都是使用private修饰,离开本类是无法实例化的。
例如:
public enum Colors {
RED(1,"红色"),
GREEN(2,"绿色"),
BLUE(3,"蓝色"),
BLACK(4,"黑色"),
WHITE(5,"白色");
Colors(int flag,String name){
this.flag = flag;
this.name = name;
}
private int flag;
private String name;
public int getFlag() {
return flag;
}
public String getName() {
return name;
}
}
public class EnumerationDemo {
public static void main(String[] args) {
//Colors color = new Colors(10,"灰色");//错误,枚举类型构造方法都是私有,不能实例化。
Colors color1 = Colors.RED;
System.out.println(color1.getFlag());
System.out.println(color1.getName());
}
}
运行结果:
1
红色
4.使用枚举实现单例
实例:
class SingletonObject{
}
public enum SingletonFactory {
INSTANCE;
private SingletonObject instance;
SingletonFactory() {
instance = new SingletonObject();
}
public SingletonObject getInstance() {
return instance;
}
}
public class SingletonObjectDemo {
public static void main(String[] args) {
SingletonObject obj1 = SingletonFactory.INSTANCE.getInstance();
SingletonObject obj2 = SingletonFactory.INSTANCE.getInstance();
System.out.println(obj1 == obj2);
}
}
运行结果:
true