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 year
Process 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.666
at 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