枚举类 (一)

发布于:2023-01-10 ⋅ 阅读:(584) ⋅ 点赞:(0)

活动地址:CSDN21天学习挑战赛

目录

枚举类

自定义枚举类

关键字enum


枚举类


1,概述

1、理解:类的对象只有有限个,确定的。我们称此类为枚举类

2、当需要定义一组常量时,强烈建议使用枚举类

3、如果枚举类中只有一个对象,则可以作为一种单例模式的实现方

2,如何定义枚举类

1、jdk5.0之前,自定义枚举类

2、jdk5.0,可以使用enum关键字定义枚举

**

自定义枚举类


1,自定义枚举类

1、声明Season对象的属性:private final修饰

2、私有化类的构造器

3、提供当前枚举类的多个对象:public static final修饰

4、其他诉求:获取枚举类对象属性或提供toString(

2,举例

自定义枚举类

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 getSeasonNDesc(){
        return seasonDesc;
    }
    //4、其他诉求:提供toString()
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}

测试类

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

输出结果

Season{seasonName='春天', seasonDesc='春'}

**

关键字enum


1,使用enum关键字定义的枚举类

1、实现接口,在enum类中实现抽象方法

2、让枚举类对象分别实现接口中的抽象方

2,Enum类中的常用方法

1、values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

2、valueOf(String str):可以把一个字符串转为对应的枚举类对象。

要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。

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

3,举例

enum关键字定义的枚举类实现接口

//接口
interface Info{
    void show();//省略了public abstract
}

//使用enum关键字定义枚举类
enum Season1 implements Info{
    //1、提供当前枚举类的对象,多个对象之间用“,”隔开,末尾对象“;”结束
    SPRING("春天","春"){
        @Override
        public void show() {
            System.out.println("春季");
        }
    },
    SUMMER("夏天","夏"){
        @Override
        public void show() {
            System.out.println("夏季");
        }
    },
    AUTUMN("秋天","秋"){
        @Override
        public void show() {
            System.out.println("秋季");
        }
    },
    WINTER("冬天","冬"){
        @Override
        public void show() {
            System.out.println("冬季");
        }
    };
    //2、声明Season对象的属性:private final修饰
    private final String seasonName;
    private final String seasonDesc;
    //3、私有化类的构造器
    private  Season1(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //4、其他诉求:获取枚举类对象属性
    public String getSeasonName(){
        return seasonName;
    }
    public String getSeasonNDesc(){
        return seasonDesc;
    }
}

测试类

public class SeasonTest1 {
    public static void main(String[] args) {
        Season1 summer = Season1.SUMMER;
        System.out.println(Season1.class.getSuperclass());//class java.lang.

        //1、toString()
        System.out.println(summer.toString());//SUMMER
        System.out.println();

        //2、values();
        Season1[] values = Season1.values();
        for (int i = 0; i < values.length; i++) {
            System.out.println(values[i]);//遍历Season1中的属性
        }
        System.out.println();
        //3、valueOf(String objName):返回枚举类中对象名是objName的对象
        // 如果没找到,则抛异常IllegalArgumentException
        Season1 winter = Season1.valueOf("WINTER");
        System.out.println(winter);//WINTER
    }
}

输出结果

class java.lang.Enum
SUMMER

SPRING
SUMMER
AUTUMN
WINTER

WINTER

提醒:在发布作品前请把不用的内容删掉(活动地址请保留)


网站公告

今日签到

点亮在社区的每一天
去签到