0
点赞
收藏
分享

微信扫一扫

Enum类中的常用方法 [Java]

小北的爹 2022-01-28 阅读 64

Enum类中的常用方法

Enum类的全类名 : java.lang.Enum

首先我们要知道enum关键字是定义枚举类的, 而使用enum关键字定义的枚举类都直接继承与java.lang.Enum类

这里我们就Enum类中的最常用的三个方法来进行一个说明

  • 这里我们要对Enum类中的方法进行举例分析,这里我们先给出一个相关的使用enum关键字定义的枚举类

    package 枚举类.枚举类的定义.enum关键字定义枚举类;
    
    //通过enum关键字定义枚举类
    public enum Season1 {
        /*
        1. 通过enum关键字定义枚举类时,首先我们上来就要提供当前枚举类的对象, 多个对象之间使用,(逗号)隔开,末尾对象使用;(封号结束)
    
        注意: 这里创建对象的时候省略了很多不重要的东西比如: new关键字, 变量类型 ,构造方法名
        补充: 这里如果是使用无参构造器创建对象的话那么()也可以省略
    
         */
        SPRING("春天","春暖花开"),
        SUMMER("夏天","夏日炎炎"),
        AUTUMN("秋天","秋高气爽"),
        WINTER("冬天","冰天雪地");
    
        /*
        后面的步骤就和我们自定义枚举类时一样
         */
    
        /*
        2. 声明Season1类的属性(常量), 使用private final关键字共同修饰
         */
        private final String seasonName;
        private final String seasonDesc;
    
        /*
        3. 私有化类的构造器,并给对象的属性赋值
    
        注意: 使用构造器赋值的方式可以让我们的每个对象都唯一存在一个常量
         */
        private Season1(String seasonName , String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        /*
        4. 其他诉求:
        4.1 获取枚举类对象的属性
         */
        public String getSeasonName(){
            return this.seasonName;
        }
        public String getSeasonDesc(){
            return this.seasonDesc;
        }
    
        /*
        4.2 根据需求提供toString()方法
    
        注意: 这里我们即使不重写toString()方法,输出此枚举类对象的时候也不会输出地址值,因为我们使用enum关键字定义的枚举类都是直接继承了
        java.lang.Enum类,而Enum类中重写了继承自Object类的toString()方法,Enum类中重写的toString()方法输出的就是枚举类对象所对应的常量名
         */
        @Override
        public String toString() {
            return "Season1{" +
                    "seasonName='" + seasonName + '\'' +
                    ", seasonDesc='" + seasonDesc + '\'' +
                    '}';
        }
    }
    

下面就是我们对这三个方法的分析

  1. toString()
    • 返回调用这个方法的枚举类对象的对象名
      • 所以我们使用enum关键字定义的枚举类没有特殊要求其实可以不用重写toString()方法
    • 这个方法是一个非静态方法

eg:

//这个Season1类就是我们上面给出的使用enum关键字定义的枚举类
Season1 summer = Season1.SUMMER;
/*
这里我们对summer对象输出的时候会默认的调用toString()方法,但是这里我们还是显示的进行了调用

这里输出的结果为: SUMMER
*/
System.out.println(summer.toString());
  1. values()
    • 通过枚举类直接调用此方法返回枚举类的对象数组, 也就是将枚举类的对象以一个一个数组元素合并成一个数组返回
    • 这个方法是一个静态方法
    • 该方法可以很方便地遍历所有枚举值

eg:

/*
这里的Season1类是通过enum关键字定义的枚举类,而使用enum关键字定义的枚举类都直接继承于Enum类,所以这里通过Season1类调用的values()方法其实是声明在Enum类中的
*/
Season1 [] values = Season1.values();
for(int i = 0; i < values.length ; i++){
    System.out.println(values[i]);
}

eg:

  • 在学习多线程中我们曾经学到Thread类中有一个内部类State,State类就是通过enum关键字定义的枚举类,在State类中定义了线程运行的几种状态
Thread.State [] values = Thread.State.values();
for(int i = 0; i < values.length ; i++){
    System.out.println(values[i])
}
  1. valueof(String objName)
    • 使用枚举类调用此方法.可以把一个字符串转换为对应的同名的枚举类对象
    • 这个方法是一个静态方法

注意: 要求字符串必须是调用此方法的枚举类中的对象名,如果不是则会抛出一个运行时异常 : IllegalArgumentException(非法的参数异常)

eg:

/*
通过Season1类调用valueof()方法创建了一个WINTER对象并赋给了Season1类型的引用winter
*/
Season1 winter = Season1.valueof("WINTER");
//这里输出的自然就是winter引用对应的枚举类对象的对象名 : WINTER
System.out.println(winter);
举报

相关推荐

0 条评论