Java枚举使用详解
一、枚举的概念
枚举:在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是特定类型对象的计数。
语法:需要使用enum关键字,在java.lang.enum类(抽象)的子类。
enum EnumTest1 { ONE, TWO, THREE, FOUR, FIVE }
枚举类型的每一个值都将映射到protected Enum(String name, int ordinal)构造函数中,然后每个值的名称都会被转换成一个字符串。
EnumTest1 etSimple = EnumTest1.ONE; switch(etSimple) { case ONE: System.out.println(etSimple.toString()); break; case TWO: System.out.println(etSimple.toString()); break; case THREE: System.out.println(etSimple.toString()); break; case FOUR: System.out.println(etSimple.toString()); break; case FIVE: System.out.println(etSimple.toString()); break; // 如果所有的枚举值都有,那么可以省略default //default: // System.out.println(etSimple.toString()); // break; }
二、自定义属性和方法
enum在Java中是以class的形式被编译器翻译的
// 使用javap EnumTest解析代码得到以下代码
final class EnumTest extends java.lang.Enum<EnumTest> { public static final EnumTest ONE; public static final EnumTest TWO; public static EnumTest[] values(); public static EnumTest valueOf(java.lang.String); static {}; }
这就说明enum本质上是一个类,具有类的部分特性。但enum本身又不是类,enum不能被继承或者继承其他的枚举(java.lang.Enum是抽象类),构造函数只能是private类型(否则编译器会报错)。
既然是一个类,那我们可以为类添加方法和属性
enum EnumTest { MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(7, "星期日");
// private 可以省略,不能是其他的控制符 private EnumTest(int value, String text) { this.value = value; this.valueString = text; } // 属性 int value; String valueString;
// 自定义的方法 void testMethod() { System.out.println("这是一个枚举类型中的方法!!!!"); } }
EnumTest et = EnumTest.ONE;
System.out.println(et.valueString);
三、常用的枚举方法
int compareTo(E o)// 比较此枚举对象与对象 o 的顺序,同一类型的枚举值
Class<E> getDeclaringClass() // 返回与此枚举常量的枚举类型相对应的Class对象
String name()// 返回枚举常量的名字
String toString()// 返回枚举常量的名称
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)// 返回指定类型的枚举常量
---恢复内容结束---