枚举类Enum

定义:类的对象个数只有有限个,确定的

eg:星期:星期一、星期二、星期三......、星期天

​ 性别:Man、Woman

​ 季节:Spring(春天).....Winter(冬天)

​ 线程状态:创建、就绪、运行、阻塞、死亡

​ 支付方式:现金、微信、支付宝、银行卡、信用卡

当定义一组常量时,强烈推荐使用枚举类

如果枚举类中只有一个对象,可以当做单例模式的实现

如何定义枚举类

1)方式一:jdk1.5之前,自定义枚举类(很多项目仍然采用此定义方式)

代码实现

package com.tohka.demos;
//自定义枚举类
public class Season {
    //1.声明Season对象的属性 private final修饰
    private final String SeasonName;
    private final String SeasonDesc;

    //2.构造方法私有化,并给对象属性赋值

    private Season(String seasonName,String seasonDesc) {
        this.SeasonName = seasonName;
        this.SeasonDesc = seasonDesc;
    }

    //3.提供当前枚举的多个对象, public static final 修饰的 类似单例的老汉式

    public static final Season SPRING = new Season("春天","春暖花开");
    public static final Season SUMMER = new Season("夏天","夏日炎炎");
    public static final Season AUTUMN = new Season("秋天","秋高气爽");
    public static final Season WINTER = new Season("冬天","冬冬冬冬");

    //4.其他述求:获取枚举对象的属性


    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

    //5.其他述求。toString方法

    @Override
    public String toString() {
        return "Season{" +
                "SeasonName='" + SeasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }
}

//测试类

package com.tohka.test;

import com.tohka.demos.Season;

public class SeasonTest {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}

2)方式二:jdk5.0,可以使用enum关键字定义枚举类

代码实现

package com.tohka.demos;
//enum关键字定义枚举类
//默认继承class java.lang.Enum
public enum  Season {
    //1.提供当前枚举对象,省略重复的关键字,= 直接常量名(属性1,属性2)。多个对象间用,隔开,末尾用;结束
     SPRING ("春天","春暖花开"),
     SUMMER("夏天","夏日炎炎"),
     AUTUMN("秋天","秋高气爽"),
     WINTER("冬天","冬冬冬冬");

    //2.声明Season对象的属性 private final修饰
    private final String SeasonName;
    private final String SeasonDesc;

    //3.构造方法私有化,并给对象属性赋值

    private Season(String seasonName,String seasonDesc) {
        this.SeasonName = seasonName;
        this.SeasonDesc = seasonDesc;
    }


    //4.其他述求:获取枚举对象的属性


    public String getSeasonName() {
        return SeasonName;
    }

    public String getSeasonDesc() {
        return SeasonDesc;
    }

 /*   //5.其他述求。toString方法 可不写,默认基础父类Enum类的toString方法

    @Override
    public String toString() {
        return "Season{" +
                "SeasonName='" + SeasonName + '\'' +
                ", SeasonDesc='" + SeasonDesc + '\'' +
                '}';
    }*/
}

//测试类
package com.tohka.test;

import com.tohka.demos.Season;

public class SeasonTest {
    public static void main(String[] args) {
        Season summer = Season.SUMMER;
        System.out.println(summer);
        System.out.println(Season.class.getSuperclass());
    }
}
//测试结果

//SUMMER
//class java.lang.Enum

Enum枚举类常用的方法

Values()方法:返回枚举类型的对象数组

ValueOf(String str)方法:返回枚举类中对象名是objName的对象

toString():返回当前枚举类对象常量的名称

  		System.out.println("****************");
        //values()
        Season[] seasons = Season.values();
        for (Season season : seasons) {
            System.out.println(season);
        }
        //返回线程生命周期常量
        Thread.State[] states = Thread.State.values();
        for (Thread.State state : states) {
            System.out.println(state);
        }
        System.out.println("**********");
        //valueOf(String str) 返回枚举类中对象名是str的对象
        Season winter = Season.valueOf("WINTER");
        System.out.println(winter);

使用enum关键字定义的枚举类实现接口的情况

​ 情况一:实现接口,在enum类中实现抽象方法

//接口
package com.tohka;

public interface Info {
    public void show();
}
//实现接口
//enum枚举类
public enum  Season implements Info {
    ......
       public void show() {
        System.out.println("这是一个季节");
       }
}
//测试
 		System.out.println("**********");
        winter.show();
//结果
//**********
//这是一个季节

​ 情况二:让枚举类对象分别实现接口中的抽象方法

//接口
package com.tohka;

public interface Info {
    public void show();
}
//实现接口
//enum枚举类
//enum枚举类
public enum  Season implements Info {
    //1.提供当前枚举对象,省略重复的关键字,= 直接常量名(属性1,属性2)。多个对象间用,隔开,末尾用;结束
     SPRING ("春天","春暖花开"){
        public void show() {
            System.out.println("这是春天");
        }
    },
     SUMMER("夏天","夏日炎炎") {
         public void show() {
             System.out.println("这是夏天");
         }
     },
     AUTUMN("秋天","秋高气爽") {
         public void show() {
             System.out.println("这是秋天");
         }
     },
     WINTER("冬天","冬冬冬冬") {
         public void show() {
             System.out.println("这是冬天");
         }
     };
    ......
}        
//测试
 		System.out.println("**********");
        winter.show();
//结果
//**********
//这是冬天
posted @ 2021-08-06 17:32  Lucky_龍  阅读(37)  评论(0)    收藏  举报