我们已经了解了 Java 语言里面的类和接口相关信息,如果有一些固定的值,在这些值之外的话就报异常,在这些值范围里面的话就正确,那么有什么办法呢?Java 语言里面就有了枚举的概念。
[public] enum 枚举类型名称{
枚举对象1,枚举对象2,枚举对象3...枚举对象n;
}
参数 | 描述 |
---|---|
[public] | 可选字段,表示枚举范围 |
enum | 定义枚举的关键字 |
枚举类型名称 | 和类名一样,枚举名 |
枚举对象 | 和类里面的属性类型,只不过是枚举对象 |
枚举和 Java 语言的类和接口类似,熟练掌握了类的定义和接口的定义,就可以很好的掌握枚举的定义。
定义一个颜色相关的枚举类
package com.haicoder.net.enu;
public enum Color {
READ, BLUE, WRITE;
}
定义一个测试方法来遍历枚举
package com.haicoder.net.enu;
public class EnumTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
for (Color color : Color.values()) {
System.out.println("枚举里面的元素有:" + color);
}
}
}
我们定义了一个表示颜色的枚举类,里面定义了一些颜色。在这个枚举里面,颜色在些范围的颜色才有效。然后通过枚举类的 values 方法获取这个枚举里面的所有元素,通过 for 循环 方式将元素数据打印。
方法名称 | 描述 |
---|---|
protected Enum(String name, int ordinal); | 构造函数,给声明的枚举赋值 |
public final int compareTo(E o) | 对象比较 |
public final boolean equals(Object object) | 比较两个枚举对象 |
public final int hashCode() | 返回枚举长了的哈嘻码 |
public final String name() | 返回此枚举名称 |
public final int ordinal() | 返回枚举常量的序数 |
package com.haicoder.net.enu;
public class EnumTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
for (Color color : Color.values()) {
System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color);
}
}
}
运行结果如下:
我们还是以上面的 Color 枚举来做例子,将枚举里面的序号和名称遍历打印了出来。
定义一个测试枚举,里面有一个属性 calorDesc。然后通过构造函数进行赋值:
package com.haicoder.net.enu;
public enum Color {
READ("红色"), BLUE("蓝色"), WRITE("白色");
private String calorDesc;
Color(String calorDesc) {
this.calorDesc = calorDesc;
}
public String getCalorDesc() {
return calorDesc;
}
public void setCalorDesc(String calorDesc) {
this.calorDesc = calorDesc;
}
}
调用测试类:
package com.haicoder.net.enu;
public class EnumTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
for (Color color : Color.values()) {
System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color + "自定义属性值:" + color.getCalorDesc());
}
}
}
运行结果如下:
我们在枚举里面定义了自己的属性,calorDesc 然后通过构造函数方式进行赋值。在获取自定义的属性的时候从对应的枚举值里面获取就行了。
定义一个枚举类,里面没有构造方法,有一个 colrDesc 属性。
package com.haicoder.net.enu;
public enum Color {
READ(), BLUE(), WRITE();
private String calorDesc;
public String getCalorDesc() {
return calorDesc;
}
public void setCalorDesc(String calorDesc) {
this.calorDesc = calorDesc;
}
}
定义一个测试类,使用 set 方式赋值
package com.haicoder.net.enu;
public class EnumTest {
public static void main(String[] args) {
System.out.println("嗨客网(www.haicoder.net)");
for (Color color : Color.values()) {
if (color.name().equals("READ")) {
color.setCalorDesc("红色");
} else if (color.name().equals("BLUE")) {
color.setCalorDesc("蓝色");
} else if (color.name().equals("WRITE")) {
color.setCalorDesc("白色");
}
}
for (Color color : Color.values()) {
System.out.println("枚举常量序数:" + color.ordinal() + " 枚举名称:" + color.name() + " 枚举值:" + color + "自定义属性值:" + color.getCalorDesc());
}
}
}
运行结果如下:
在枚举类里面,我们没有设置构造函数,也没有对 colrDesc 进行赋值,在测试类里面,我们调用了枚举的 set 方法对相应的枚举对象进行赋值。
枚举是在类和接口的基础上新增加的一个类型。它可以将已经知道的数据穷举,它的作用是如果数据在这些穷举里面就正常,如果不在的话就异常。