枚举
Enum
- 定义:
enum是1.5出现的一种类的表现规范,本质上还是一种类,编译器会生成一个类继承自java.lang.Enum
-
特点:
- 因为它的属性是final的,因此一般是大写,由于这种特性,它可以用来处理一些固定的数据
- 也可以用来做单例
- 创建的资源消耗小于类
- 可用于switch(enum)
- 它的父类public abstract class Enum<E extends Enum
> implements Comparable ,
Serializable。因此它也有int compareTo(T)方法,放在有序集合中是自然排序,等还有其他父类的特性 - 不能继承其他的enum,因为编译器会把enum加上final,所以不能继承,也不能继承其他类,因为本身就继承了java.lang.Enum
- 如果你要定义自己的方法需要先定义enum的实例,最后加上‘;’,然后才可以定义方法
- 可以实现多个接口,不能继承
- 实现接口不能写不能写@override
-
api:
enums values() 返回enum数组,是编译器插入到enum中的,所以当你向上转型时是不能用这个方法的,要用(是Class上的方法)enum.getClass().getEnumConstants()enum Search { HITHER, YON } public class UpcastEnum { public static void main(String[] args) { Search[] vals = Search.values(); Enum e = Search.HITHER; // Upcast // e.values(); // No values() in Enum for(Enum en : e.getClass().getEnumConstants()) { System.out.println(en); } } } /* Output: HITHER YON *///:~
int ordinal() 返回它的enum排序index
switch
public enum Enum01 {
LEFT, RIGHT
}
class EnumTest03 {
Enum01 enum01;
public EnumTest03(Enum01 enum01) {
this.enum01 = enum01;
}
public static void main(String[] args) {
EnumTest03 enumTest03L = new EnumTest03(Enum01.LEFT);
EnumTest03 enumTest03R = new EnumTest03(Enum01.RIGHT);
enumTest03L.description();
enumTest03R.description();
}
void description() {
switch (enum01) {
case LEFT:
System.out.println(enum01);
break;
case RIGHT:
System.out.println(enum01);
break;
default:
System.out.println("没有这个值");
break;
}
}
}
enum例子
public enum ResponseEnum implements Cloneable, Serializable {
SUCCESS(200, "成功"),
FAIL(500, "失败");
private final String str;
private final int status;
private ResponseEnum(int status, String str) {
this.status = status;
this.str = str;
}
public String getStr() {
return str;
}
public int getStatus() {
return status;
}
}
class Test {
public static void main(String[] args){
System.out.println(ResponseEnum.SUCCESS);
System.out.println(ResponseEnum.FAIL);
}
}
/**out:
SUCCESS
FAIL
*/