1.枚举的概念
枚举就是把几个固定的常量列举出来。枚举本质上也是一个类,只不过这个类的对象是几个固定的值,不能让外界创建对象【因为其内部的构造方法私有】
2.定义一个枚举类
public enum Week {//枚举项表示Week类的对象,带括号表示使用有参数构造方法, 不带括号,表示使用空参数构造方法SUNDAY("星期日"), MONDAY("星期一"), TUESDAY,WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; private String value; //星期几//把构造方法私有化,目的就是不让别人创建的对象private Week() {}//把构造方法私有化,目的就是不让别人创建的对象private Week(String value) {this.value = value;}@Overridepublic String toString() {return "Week{" +"value='" + value + '\'' +'}';}
}
3.枚举的方法
//枚举类的方法
//任何自定义的枚举类都继承Enum类,该类提供了一些方法可以使用
public class Demo1 {public static void main(String[] args) {//string name()获取枚举项的名称System.out.println(Week.Monday.name());//int ordinal()返回枚举项在枚举类中的索引值System.out.println(Week.Tuesday.ordinal());//int compareTo(E o)比较两个枚举项,返回的是索引值的差值System.out.println(Week.Monday.compareTo(Week.Saturday));//string toString()返回枚举常量的名称[不会使用,只为了打印的时候不是地址值存在]//Enum类已经复写[获取枚举项的名称]System.out.println(Week.Monday.toString());// static <T> T valueOf(Class<T> type , String name)// 获取指定枚举类中的指定名称的枚举值Week monday = Week.valueOf(Week.class, "Monday");System.out.println(monday);System.out.println(Week.Monday == monday);//values() 获得所有的枚举项,返回一个数组Week[] values = Week.values();}
}打印结果:
--------------------------------------------------------
Monday
1
-5
Monday
Monday
true
4.枚举和switch
写一个switch语句,根据枚举项做出选择执行不同的代码
public class Demo1 {public static void main(String[] args) {Week[] values = values();Random random = new Random();int index = random.nextInt(7);Week w = values[index];switch (w){case SUNDAY:System.out.println("星期天");break;case MONDAY:System.out.println("星期一");break;case TUESDAY:System.out.println("星期二");break;case WEDNESDAY:System.out.println("星期三");break;case THURSDAY:System.out.println("星期四");break;case FRIDAY:System.out.println("星期五");break;case SATURDAY:System.out.println("星期六");break;}}
}打印结果:
--------------------------------------------------------
星期四