11-枚举类

nobility 发布于 2021-03-17 2867 次阅读


枚举类

声明

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;
}
此作者没有提供个人介绍
最后更新于 2021-03-17