1.枚举类型中定义的常量是枚举类型的实例。
2.多个常量以逗号分隔(最后为分号不是逗号必须有分号)。
3.枚举类型也是类,可以给枚举类型定义属性。
4.枚举常量(实例)后面跟括号的形式,括号中的数据类型是什么样的表示创建该实例时调用的构造方法就是什么样的。不给枚举添加属性用有括号的构造函数没用。
5.可以声明枚举类型的变量,当然该变量类实例化只能为枚举类型的实例值之一。
6.枚举实例一定要列举在最前面,写在属性后面会报错。
public enum TestRunTimeSelfException { INSTANCEOne("1001","测试1信息"),INSTANCETwo("1002","测试2信息"); private String code; private String msg; TestRunTimeSelfException(String code,String msg){ this.code = code; this.msg = msg; } public String getCode(){ return this.code; } public String getMsg(){ return this.msg; } }
枚举类型定义了两件事:
- 枚举常量
- 这些常量的顺序
枚举类型创建常量的有序列表作为类型,它以特定顺序指定常量。在枚举类型中定义的常量是该枚举类型的实例。
以下代码声明了一个名为Level的公共枚举类型,它具有四个枚举常量:LOW,MEDIUM,HIGH和URGENT。
public enum Level {
LOW, MEDIUM, HIGH, URGENT;
}
Level枚举类型定义了四个枚举常量。
Level枚举类型的变量只能有四个值之一 - LOW,MEDIUM,HIGH和URGENT或null。
我们可以使用点符号通过使用枚举类型名称作为限定符来引用枚举常量。
以下代码将值分配给Level枚举类型的变量:
Level low = Level.LOW;
Level medium = Level.MEDIUM;
Level high = Level.HIGH;
Level urgent = Level.URGENT;
我们不能实例化枚举类型。以下代码导致编译时错误:
Level badAttempt = new Level(); // A compile-time error
枚举分配顺序号
枚举类型为其所有常量分配一个顺序号,称为ordinal。
序数从零开始,在常数列表中从第一个到最后一个递增1。
第一个枚举常量赋值为零,第二个为1,第三个为2,依此类推。
分配给Level枚举类型中声明的常量的序数值为0到LOW,1到MEDIUM,2到HIGH,以及3到URGENT。
每个枚举常量都有一个与常量的标识符相同的名称。例如,级别枚举类型中的LOW常数的名称为“LOW”。
我们可以分别使用name()和ordinal()方法获取枚举常量的名称和序号。
每个枚举类型都有一个名为values()的静态方法,它按它们在正文中声明的顺序返回一个常量数组。
看情况枚举类的所有实例都创建了,怎么去掉没用的?
枚举类型值比较:
直接使用==即可(当然两侧的操作数的类型要一致)
枚举的values()方法和valueOf()返回的还是枚举的具体实例(常量)的名字,没啥用