javaenum定义属性_javaenum(枚举)使⽤详解+总结
enum 的全称为 enumeration, 是 JDK 1.5 中引⼊的新特性,存放在 java.lang 包中。
下⾯是我在使⽤ enum 过程中的⼀些经验和总结,主要包括如下内容:
8. 总结
原始的接⼝定义常量
语法(定义)
创建枚举类型要使⽤ enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的⼦类(java.lang.Enum 是⼀个抽象类)。枚举类型符合通⽤模式 Class Enum>,⽽ E 表⽰枚举类型的名称。枚举类型的每⼀个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这⾥,每个值的名称都被转换成⼀个字符串,并且序数设置表⽰了此设置被创建的顺序。
这段代码实际上调⽤了7次 Enum(String name, int ordinal):
遍历、switch 等常⽤操作
对enum进⾏遍历和switch的操作⽰例代码:
输出结果:
enum 对象的常⽤⽅法介绍
intcompareTo(E o)
⽐较此枚举与指定对象的顺序。
ClassgetDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
Stringname()
返回此枚举常量的名称,在其枚举声明中对其进⾏声明。java valueof
intordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
StringtoString()
返回枚举常量的名称,它包含在声明中。
static > TvalueOf(Class enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
输出结果:
给 enum ⾃定义属性和⽅法
给 enum 对象加⼀下 value 的属性和 getValue() 的⽅法:
输出结果:
EnumSet,EnumMap 的应⽤
原理分析
enum 的语法结构尽管和 class 的语法不⼀样,但是经过编译器编译之后产⽣的是⼀个class⽂件。该cl
ass⽂件经过反编译可以看到实际上是⽣成了⼀个类,该类继承了java.lang.Enum。EnumTest 经过反编译(javap st.EnumTest 命令)之后得到的内容如下:
所以,实际上 enum 就是⼀个 class,只不过 java 编译器帮我们做了语法的解析和编译⽽已。
总结
可以把 enum 看成是⼀个普通的 class,它们都可以定义⼀些属性和⽅法,不同之处是:enum 不能使⽤ extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java是单⼀继承)。
我的⼀个测试:
st;public enumEnumTest {
red("hong",5,6),
green("lv",6,8),
blue("lan",7,9);privateString name2 ;private intindex2 ;private intcode ;private EnumTest( String name2 , int index2, intcode ) {this.name2 =name2 ;this.index2 =index2 ;de =code ;
}public static voidmain(String[] args) {
System.out.d.getname2());
System.out.dpareTo(red));
System.out.DeclaringClass().getName());
System.out.println(red.name());
System.out.dinal());
System.out.String());
System.out.println(EnumTest.valueOf("red"));
System.out.println(red.index2);
}publicString getname2() {returnname2;
}public voidsetname2(String name2) {this.name2 =name2;
}public intgetindex2() {returnindex2;
}public void setindex2(intindex2) {this.index2 =index2;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论