Java枚举

Java枚举教程

我们已经了解了 Java 语言里面的类和接口相关信息,如果有一些固定的值,在这些值之外的话就报异常,在这些值范围里面的话就正确,那么有什么办法呢?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); } } }

01 枚举.png

我们定义了一个表示颜色的枚举类,里面定义了一些颜色。在这个枚举里面,颜色在些范围的颜色才有效。然后通过枚举类的 values 方法获取这个枚举里面的所有元素,通过 for 循环 方式将元素数据打印。

Java枚举类通用方法

方法名称 描述
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); } } }

运行结果如下:

02 枚举方法.png

我们还是以上面的 Color 枚举来做例子,将枚举里面的序号和名称遍历打印了出来。

Java枚举对象赋值

构造函数赋值

定义一个测试枚举,里面有一个属性 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()); } } }

运行结果如下:

03 枚举构造方法赋值.png

我们在枚举里面定义了自己的属性,calorDesc 然后通过构造函数方式进行赋值。在获取自定义的属性的时候从对应的枚举值里面获取就行了。

SET方式赋值

定义一个枚举类,里面没有构造方法,有一个 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()); } } }

运行结果如下:

04 枚举set方式赋值.png

在枚举类里面,我们没有设置构造函数,也没有对 colrDesc 进行赋值,在测试类里面,我们调用了枚举的 set 方法对相应的枚举对象进行赋值。

Java枚举总结

枚举是在类和接口的基础上新增加的一个类型。它可以将已经知道的数据穷举,它的作用是如果数据在这些穷举里面就正常,如果不在的话就异常。