Java枚举类

目录

1、说明

2、自定义枚举类

3、关键字enum定义枚举类

 4、Enum类常用方法

1、value()

 2、valueOf(String str)

3、toString()

 5、枚举类实现接口

1、说明

类的对象只有有限个数,且是明确的,这样的类,被称为枚举类。

和数学中的枚举法一样,通过一个个的列举出所有可能来解决问题。

例如星期,从星期一到星期天,星期就是类,而从星期一到星期天,则是星期类中的对象,数量有限,且是明确的,不是匿名对象。

所以,当我们需要定义一组常量时,建议使用枚举类,因为一组常量数量有限,且是常量,对象是明确的,使用枚举类定义这一组常量,方便于使用和管理。

在jdk1.5之前,需要自定义枚举类,jdk1.5之后,使用关键字enum来定义

当枚举类只有一个对象时,则就是单例模式。

单例模式:构造器私有化,外部无法对类进行实例化对象,只能通过类的静态方式来调用里面的对象。

懒汉式:


public class Single {
    private static Single single;

    private Single() {
    }

    public Single getInstance() {
        if (single == null) {
            synchronized (this) {
                if (single == null) {
                    single = new Single();
                }

            }
        }
        return single;
    }
}

 饿汉式:

public class Single {

    private static Single single = new Single();

    private Single() {
    }

    public Single getInstance() {
        return single;
    }
}

2、自定义枚举类

规则:

枚举类对象的属性不应允许被改动 , 所以应该使用 private final 修饰
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值
若枚举类显式的定义了带参数的构造器 , 则在列出枚举值时也必须对应的
传入参数

步骤:

1,私有化属性,使用private final修饰

2,私有化构造器,根据需要提供参数

3,提供当前枚举类的多个对象,使用private static final修饰

4、根据需要提供get和toString方法


public class SeasonEnum1 {
    //1、声明私有、常量属性
    private final String seasonName;

    //2、私有化构造器
    private SeasonEnum1(String seasonName) {
        this.seasonName = seasonName;
    }

    //3、提供当前枚举类的多个对象,使用private static final修饰
    public static final SeasonEnum1 SPRING = new SeasonEnum1("春天");
    public static final SeasonEnum1 SUMMER = new SeasonEnum1("夏天");
    public static final SeasonEnum1 AUTUMN = new SeasonEnum1("秋天");
    public static final SeasonEnum1 WINTER = new SeasonEnum1("冬天");

    @Override
    public String toString() {
        return seasonName;
    }
}

3、关键字enum定义枚举类

1、enum默认继承Enum类,不需要去显式继承,enum的放在类名之前。 

2、枚举类的对象必须声明在首行,只需写出对象的名字即可,如何有枚举类有属性,则提供一个括号,提供给构造器就行,且在多个枚举类之间使用“,”隔开,最后一个使用“;”。列出的对象实例,系统会自动加上public static final 修饰符。

3、构造器私有化,不使用时,它也默认是私有化的。

 

 默认的toString方法,会打印例子名。

package eunm;

/**
 * @description: 自定义枚举类
 * @program: java_1
 * @author: xichen
 * @create: 2022-06-26 19:00
 **/
public enum SeasonEnum1 {
    SPRING("春天"),

    SUMMER("夏天"),

    AUTUMN("秋天"),

    WINTER("冬天");
    private final String SEASONNAME;

    SeasonEnum1(String seasonName) {
        this.SEASONNAME = seasonName;
    }

    @Override
    public String toString() {
        return SEASONNAME;
    }
}

重写toString方法以后

 4、Enum类常用方法

1、value()

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

 2、valueOf(String str)

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

 

3、toString()

返回当前枚举类对象常量的名称 

 没有重写toString之前。

重写之后。

 5、枚举类实现接口

1、类实现接口的方法写在类中,则与平时类实现接口一样,但是,枚举类中的对象,每一个对象都共享着这个实现方法。

2、枚举类实例对象,想要每一个对象的实现方法不相同,则需要在实例对象后面加入大括号,并在大括号内写实现方法。

 

package eunm;

/**
 * @description: 自定义枚举类
 * @program: java_1
 * @author: xichen
 * @create: 2022-06-26 19:00
 **/
public enum SeasonEnum1 implements S{
    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("冬天寒冷");
        }
    };
    private final String SEASONNAME;

    SeasonEnum1(String seasonName) {
        this.SEASONNAME = seasonName;
    }

    @Override
    public String toString() {
        return SEASONNAME;
    }


}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值