Java中枚举类型可以取代一般的常量定义方式,可以将常量封装在类或接口中;枚举类型本质上还是以类的形式存在的,枚举类型继承于java.lang.Enum类,定义一个枚举类型时,每一个枚举类型成员都可以看做是枚举类型的一个实例,这些枚举类型成员默认都被【public+final+static】修饰。
枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。
枚举类型的优点:
1.类型安全;
2.紧凑有效的数据定义;
3.可以和程序其他部分完美交互;
4.运行效率高;
1.定义枚举类型的关键字【enum】
2.使用枚举类型设置常量
public enum Constants{
Constants_A,
Constants_B,
Constants_C
}
使用时通过Constants.Constants_A来调用。
3.操作枚举类型成员的方法
方法名称 | 返回值类型 | 具体含义 | 使用方法 | 举例 |
values() | 枚举成员的数组 | 将枚举类型成员以数组的形式放回 | 枚举类型名称.values() | Constants.values() |
valueOf() | 枚举实例对象 | 将普通字符串转换为枚举类型实例 | 枚举类型名称.valuesOf("abc") | Constants.valueOf("abc") |
compareTo() | int型 | 用于比较2个枚举对象在定义时的顺序 | 枚举对象.compareTo() | Constants_A.compareTo(Constants_B) |
ordinal() | int型 | 用于得到枚举成员的位置索引 | 枚举对象.ordinal() | Constants_A.ordinal() |
3.1 values()方法
通过此方法获取枚举类型的成员,以数组的形式返回。
package myenum;public class ShowEnum {enum Constants {Constants_A, Constants_B}public static void main(String[] args) {for (int i = 0; i < Constants.values().length; i++) {System.out.println("枚举类型成员变量_" + i + ": " + Constants.values()[i]);}}
}输出:枚举类型成员变量_0: Constants_A枚举类型成员变量_1: Constants_B
3.2 valuesOf()方法
valuesOf()方法可以将普通字符串转换为枚举类型。
3.3 compareTo()方法
compareTo()方法用于比较两个枚举类型对象在定义时的顺序。
package myenum;public class EnumMethodTest {enum Constants2 {constantsxxx, Constants_A, Constants_B, constants_C}public static void compare(Constants2 c) {for (int i = 0; i < Constants2.values().length; i++) {System.out.println(c + "与" + Constants2.values()[i] + "的位置比较结果是:" + c.compareTo(Constants2.values()[i]));}}public static void main(String[] args) {compare(Constants2.valueOf("Constants_B"));}
}输出:Constants_B与constantsxxx的位置比较结果是:2Constants_B与Constants_A的位置比较结果是:1Constants_B与Constants_B的位置比较结果是:0Constants_B与constants_C的位置比较结果是:-1
compareTo()方法的返回结果中:1代表方法中的参数在调用对象之前一个位置;0代表方法中的参数两个对象位置相同;-1代表方法中的参数在调用对象之后一个位置。
3.4 ordinal()方法
ordinal()方法用于获取枚举对象的索引位置。
package myenum;public class EnumIndexTest {enum Constants3 {constantsxxx, Constants_A, Constants_B, constants_C}public static void main(String[] args) {for (int i = 0; i < Constants3.values().length; i++) {System.out.println(Constants3.values()[i] + "的索引是:" + Constants3.values()[i].ordinal());}}
}输出:constantsxxx的索引是:0Constants_A的索引是:1Constants_B的索引是:2constants_C的索引是:3
4.枚举类型中的构造方法
枚举类型中的构造方法必须是private修饰的。
package myenum;public class EnumConstructorMethod {enum Constants4 {con_A("我是枚举成员A"), //定义带参数的枚举类型成员,枚举成员间必须,逗号分隔con_B("我是枚举成员B"),con_C("我是枚举成员C"),con_D(3);private String description;private int i = 4;private Constants4() {}private Constants4(String desc) { //private定义枚举类型的构造方法this.description = desc;}private Constants4(int i) { //private定义枚举类型的构造方法this.i = this.i + i;}public String getDescription() { //获取description的值return description;}public int getI() { //获取i的值return i;}public static void main(String[] args){for (int i=0; i<Constants4.values().length;i++){System.out.println(Constants4.values()[i]+"调用getDescription()方法的结果为:"+Constants4.values()[i].getDescription());System.out.println(Constants4.values()[i]+"调用getI()方法的结果为:"+Constants4.values()[i].getI());}}}
}输出:con_A调用getDescription()方法的结果为:我是枚举成员Acon_A调用getI()方法的结果为:4con_B调用getDescription()方法的结果为:我是枚举成员Bcon_B调用getI()方法的结果为:4con_C调用getDescription()方法的结果为:我是枚举成员Ccon_C调用getI()方法的结果为:4con_D调用getDescription()方法的结果为:nullcon_D调用getI()方法的结果为:7