枚举表示的是一组常量。
实现
(1)Enum关键字
JDK5的新特性。和类相同,可以有构造函数方法,但构造函数要定义为private。
//无参构造
enum Color1 {
RED, GREED, BLUE;
public static void main(String[] args) {
Color1 color = Color1.RED;
System.out.println(color);
}
}
//有参构造
enum Color2 {
RED(0, "红色"),
GREED(1, "绿色"),
BLUE(2, "蓝色"),
;
private int code;
private String name;
private Color2(int code, String name) {
this.code = code;
this.name = name;
}
public String getCode() {
return this.code;
}
public String getName() {
return this.name;
}
public static void main(String[] args) {
Color2 color = Color2.RED;
System.out.println(color.getName());
}
}
Enum定义的枚举类型默认继承于java.lang.Enum,并实现了java.lang.Serializable和java.lang.Comparable接口。
(2)枚举类
//无参构造
class Color_1 {
public static final Color_1 RED = new Color_1();
public static final Color_1 GREEN = new Color_1();
public static final Color_1 BLUE = new Color_1();
private Color_1() {
}
public static void main(String[] args) {
Color_1 color = Color_1.RED;
System.out.println(color);
}
}
//有参构造
class Color_2 {
public static final Color_2 RED = new Color_2("红色");
public static final Color_2 GREEN = new Color_2("绿色");
public static final Color_2 BLUE = new Color_2("蓝色");
private String name;
private Color_2(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public static void main(String[] args) {
Color_2 color = Color_2.RED;
System.out.println(color.getName());
}
}
方法
public class EnumTest {
public static void main(String[] args) {
Color1[] arry = Color1.values(); //返回枚举类中的所有值
Color1 color1 = Color1.GREED;
int num = color1.ordinal(); //返回枚举常量的索引,其索引从0开始
Color1 color2 = Color1.valueOf("RED");
//根据字符串返回对应的枚举常量,不存在则报错IllegalArgumentException
}
}
注:
对于由Enum定义的枚举,当执行Color1 color = Color1.RED时,会对改枚举类中的所有枚举常量各执行一次构造函数。