enum枚举
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
enum Color
{ RED, GREEN, BLUE; }
values (), ordinal () 和 valueOf () 方法values () 返回枚举类中所有的值。ordinal ()方法可以找到每个枚举常量的索引,就像数组索引一样。valueOf ()方法返回指定字符串值的枚举常量。
enum枚举类,即一组固定的常量。枚举指的是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的集合。例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举,可以定义一个枚举类型叫做DayOfWeek。定义方法如下:
public enum DayOfWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
一个简单的程序,一年四季(比较懒惰只写了两季),注意定义enum类时只允许输出,不允许输入所以没有设置set类(同时写了final关键字的variable也不能建立getter结构)。
package Enum;public class test {enum yearseason {//必须要在枚举类开头声明多个对象,对象之间使用,隔开SPRING("Spring", "the start of the year"),SUMMER("Summer", "hot season of the year");//声明当前对象的实例变量,使用private final修饰private final String pname;private final String pdetail;//私有化构造器private yearseason(String sname, String sdetail) {this.pname = sname;this.pdetail = sdetail;}public String getPname() {return pname;}public String getPdetail() {return pdetail;}public String toString(){return "season name is "+pname+";season detail is "+pdetail;}}public static void main(String[] args) {//yearseason WINTER = new yearseason("WINTER","cold weather of the year");//enum里面没有设置set结构所以不能写入哦System.out.println(yearseason.SPRING.getPname()+":"+yearseason.SPRING.getPdetail());System.out.println(yearseason.SUMMER.toString());}
}
程序输出:
Spring:the start of the year
season name is Summer;season detail is hot season of the yearProcess finished with exit code 0
values () 方法的使用:
依次输出每个枚举类型时候可以这样
public static void main(String[] args) {//enum类的名称+[]+自定义的数组名称 = enum类的名称.values()//即可返回数组中的所有值DayOfWeek [] x_total=DayOfWeek.values();//for(每个元素:数组名){XXX}增强for循环,能快速输出一个数组的内容for(DayOfWeek h_each:x_total){//for(DayOfWeek h_each:DayOfWeek.values())//当然这样写也是一模一样的,它相当于上面两行合并了System.out.println("today is "+h_each);}}
返回值
today is SUNDAY
today is MONDAY
today is TUESDAY
today is WEDNESDAY
today is THURSDAY
today is FRIDAY
today is SATURDAY
ordinal ()方法的使用
(返回所寻元素数组下标,返回值int)
enum DayOfWeek{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}
public class my_enum{public static void main(String[] args) {// 获取WEDNESDAY枚举常量的位置,这里应是【3】下标位置int ord = DayOfWeek.WEDNESDAY.ordinal();System.out.println("WEDNESDAY的位置(ordinal): " + ord);// 输出: WEDNESDAY的位置(ordinal): 3}
}
WEDNESDAY的位置(ordinal): 3
valueOf ()方法的使用
valueOf() 方法也是 Enum 类的一个静态方法,它用于将给定的字符串名称转换为对应的枚举常量。
如果字符串名称与枚举类型中某个常量的名称匹配,则 valueOf() 方法返回该常量;否则,它将抛出一个错误 IllegalArgumentException。
enum DayOfWeek{SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY
}
public class my_enum{public static void main(String[] args) {System.out.println(DayOfWeek.valueOf("TUESDAY"));System.out.println("=========>");System.out.println(DayOfWeek.valueOf("666"));}
}
结果
TUESDAY
=========>
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant exception.demo02.DayOfWeek.666at java.base/java.lang.Enum.valueOf(Enum.java:274)at exception.demo02.DayOfWeek.valueOf(my_enum.java:73)at exception.demo02.my_enum.main(my_enum.java:81)Process finished with exit code 1