枚举
枚举可能是我们使用次数比较少的特性,在 Java 中,枚举使用 enum
关键字来表示,枚举其实是一项非常有用的特性,你可以把它理解为具有特定性质的类。enum 不仅仅 Java 有,C 和 C++ 也有枚举的概念。下面是一个枚举的例子。
public enum Family {
FATHER,
MOTHER,
SON,
Daughter;
}
上面我们创建了一个 Family
的枚举类,它具有 4 个值,由于枚举类型都是常量,所以都用大写字母来表示。那么 enum 创建出来了,该如何引用呢?
public class EnumUse {
public static void main(String[] args) {
Family s = Family.FATHER;
}
}
枚举特性
enum 枚举这个类比较有意思,当你创建完 enum 后,编译器会自动为你的 enum 添加 toString()
方法,能够让你方便的显示 enum 实例的具体名字是什么。除了 toString() 方法外,编译器还会添加 ordinal()
方法,这个方法用来表示 enum 常量的声明顺序,以及 values()
方法显示顺序的值。
public static void main(String[] args) {
for(Family family : Family.values()){
System.out.println(family + ", ordinal" + family.ordinal());
}
}
enum 可以进行静态导入包,静态导入包可以做到不用输入 枚举类名.常量
,可以直接使用常量,神奇吗? 使用 ennum 和 static
关键字可以做到静态导入包
上面代码导入的是 Family 中所有的常量,也可以单独指定常量。
枚举和普通类一样
枚举就和普通类一样,除了枚举中能够方便快捷的定义常量
,我们日常开发使用的 public static final xxx
其实都可以用枚举来定义。在枚举中也能够定义属性和方法,千万不要把它看作是异类,它和万千的类一样。
public enum OrdinalEnum {
WEST("live in west"),
EAST("live in east"),
SOUTH("live in south"),
NORTH("live in north");
String description;
OrdinalEnum(String description){
this.description = description;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public static void main(String[] args) {
for(OrdinalEnum ordinalEnum : OrdinalEnum.values()){
System.out.println(ordinalEnum.getDescription());
}
}
}
一般 switch 可以和 enum 一起连用