枚举类
声明
jdk1.5后,用enum替换class,枚举类都隐式继承java.lang.Enum抽象类,但是该抽象类无抽象方法,枚举中定义的是枚举项(符号常量列表),用逗号分隔,且必须在第一行
若自定义构造方法则必须将其私有化,即除拉public即可,若是有参构造,无参构造就会消失,需要手动给枚举项调用有参构造
枚举类本质也是类,也可以继承和实现接口,枚举类中也可以定义抽象方法,若要重写接口方法或枚举类中定义抽象方法,则需要给每一个枚举项以匿名内部类大括号形式重写抽象方法
public enum MyEnum{
A,B,C,D; //枚举对象
//A("a"),B("b"),C("c"),D("d"); //必须在第一行
//未定义无参构造,所以无参构造会消失,需要手动调用有参构造
//private String context;
//private MyEnum(String context){ //自定义构造方法必须私有化,即除拉public即可
//this.context = context;
//};
//public static void main(String[] args) {
//System.out.println(MyEnum.A);
//A,未重写toString方法,默认toString返回枚举项的名
//}
//...与普通的类一样可以定义一些枚举对象属性和方法
}
用法和方法
枚举用法和普通类的符号常量一样,直接点属性的形式使用
大多数与switch语句连用,但是在case中无需点属性形式,直接写即可
每个枚举类都会有一个静态方法返回该枚举类的常量数组
MyEnum a = MyEnum.A;
System.out.println(a); //A,枚举类重新toString方法为返回枚举项的常量名
System.out.println(a.name()); //A,返回该枚举项的常量名
System.out.println(a.ordinal()); //0,返回该枚举项的序号
MyEnum[] myEnum = MyEnum.values(); //返回所有枚举姓的全部常量,以数组形式
System.out.println(Arrays.toString(myEnum)); //[A, B, C, D]
Random random = new Random();
switch (myEnum[random.nextInt(4)]){ //在case中无需点的形式
case A:
System.out.println(1);
break;
case B:
System.out.println(2);
break;
case C:
System.out.println(3);
break;
case D:
System.out.println(4);
break;
}
Comments NOTHING