Java 枚举

目录

一、枚举简介

二、枚举作用

三、枚举类常用方法

四、语法

五、示例

5.1 、示例1

5.2 、示例2

5.3 、示例3


一、枚举简介

        枚举类型是一种特殊的数据类型,它允许变量是一组预定义的常量。变量必须等于其预定义的值之一。

        在生活中有很多关于枚举的例子,例如表示星期的 SUNDAY(星期日)、 MONDAY (星期一)、TUESDAY(星期二)、 WEDNESDAY (星期三)、THURSDAY(星期四)、 FRIDAY (星期五)、SATURDAY(星期六) 就可以定义一个枚举。

        或者关于月份 JANUARY(一月)、FEBRUARY(二月) 、MARCH(三月)、APRIL(四月)、MAY(五月)、JUNE (六月)、JULY(七月)、AUGUST(八月)、SEPTEMBER(九月)、OCTOBER(十月)、NOVEMBER(十一月)、DECEMBER(十二)也可以定义一个枚举。

二、枚举作用

    enum 枚举名称 {}

        1、通过类型可以限制一个内容的取值范围。

        2、作为类型检查,有效期检查。

        3、和常量相比,编码简单明了。

                需要注意的是枚举不支持继承。

三、枚举类常用方法

方法描述
final String name()返回此枚举常量的名称
final int ordinal()返回此枚举常量的序号
Class<E> getDeclaringClass()返回对应于此枚举常量的Class对象
T valueOf(Class<T> enumType, String name)返回指定名称枚举

四、语法

enum 枚举名称 {}

五、示例

5.1 、示例1

        常用方法使用。


public enum WeekEnum {
    SUNDAY, // 星期日
    MONDAY,// 星期一
    TUESDAY,// 星期二
    WEDNESDAY,// 星期三
    THURSDAY,// 星期四
    FRIDAY,// 星期五
    SATURDAY;// 星期六

    public static void main(String[] args) {
        /**
         * final String name()  方法
         */
        System.out.println(MONDAY.name()); // SUNDAY
        /**
         * final int ordinal() 方法
         */
        System.out.println(MONDAY.ordinal()); // 1
        /**
         * etDeclaringClass() 方法
         */
        WeekEnum monday = WeekEnum.MONDAY;
        Class clazz = WeekEnum.MONDAY.getDeclaringClass();
        System.out.println(clazz); // class WeekEnum

        /**
         * valueOf(Class<T> enumType, String name) 方法
         */
        Enum e =  WeekEnum.valueOf(clazz,monday.name());
        System.out.println(e); //MONDAY

        /**
         *  switch 中使用枚举
         */
        switch (WeekEnum.SUNDAY){
            case SUNDAY:
                System.out.println("星期日");
                break;
            case MONDAY:
                System.out.println("星期一");
                break;
            case TUESDAY:
                System.out.println("星期二");
                break;
            case WEDNESDAY:
                System.out.println("星期三");
                break;
            case THURSDAY:
                System.out.println("星期四");
                break;
            case FRIDAY:
                System.out.println("星期五");
                break;
            case SATURDAY:
                System.out.println("星期六");
                break;
        }

    }
}

5.2 、示例2

        开发使用。


public enum PayTypeEnum {

    PAY_WX(1, "微信支付"),
    PAY_ALI(2,"支付宝支付");

    //枚举类型业务数据值
    private int value;
    //显示名称
    private String displayName;

    PayTypeEnum(int value, String displayName) {
        this.value = value;
        this.displayName = displayName;
    }

    /**
     * 根据value获取到枚举类名称
     *
     * @param value
     * @return
     */
    public static String getNameByValue(Integer value) {
        PayTypeEnum type = getByValue(value);
        return null == type ? "" : type.name();
    }

    /**
     * 根据value获取到枚举类显示名称
     *
     * @param value
     * @return
     */
    public static String getDisplayNameByValue(Integer value) {
        PayTypeEnum type = getByValue(value);
        return null == type ? "" : type.getDisplayName();
    }

    /**
     * 根据value获取枚举类型
     *
     * @param value
     * @return
     */
    public static PayTypeEnum getByValue(Integer value) {
        if (null != value) {
            for (PayTypeEnum type : PayTypeEnum.values()) {
                if (type.getValue() == value) {
                    return type;
                }
            }
        }
        return null;
    }

    /**
     * 根据name获取枚举value
     *
     * @param name
     * @return
     */
    public static int getValueByName(String name) {
        if (null != name && !"".equals(name.trim())) {
            PayTypeEnum type = PayTypeEnum.valueOf(name);
            return null == type ? 0 : type.value;
        }
        return 0;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

}

5.3 、示例3

        枚举实现接口示例。

/**
 *  枚举实现接口
 */
public enum ColorEnum implements  ColorService{
    RED{
        @Override
        public String getColor() {
            return "红色";
        }
    },
    BLUE{
        @Override
        public String getColor() {
            return "蓝色";
        }
    };


    /**
     * 
     *  0  RED  红色
     * 1  BLUE  蓝色
     */
    public static void main(String[] args) {
        for (ColorEnum c:ColorEnum.values()) {
            System.out.println(c.ordinal()+"  "+c.name()+"  "+c.getColor());
        }
    }
}


/**
 * 定义一个接口
 */
interface ColorService{

    public String getColor();
}

### Java 枚举的概念与使用方法 #### 什么是枚举? 在 Java 中,`enum` 是一种特殊的数据类型,用于定义一组固定的常量集合。通过使用 `enum`,可以提高代码的可读性和安全性。 #### 创建和使用枚举 以下是创建和使用枚举的基本方式: ```java public enum Color { RED, GREEN, BLUE; } ``` 上述代码定义了一个名为 `Color` 的枚举类,其中包含三个常量:`RED`, `GREEN`, 和 `BLUE`[^1]。 可以通过以下方式访问这些枚举值: ```java System.out.println(Color.RED); // 输出: RED ``` #### 单例模式中的应用 Java 枚举天然支持单例设计模式。由于每个枚举常量在整个 JVM 生命周期中仅存在一个实例,因此可以直接利用这一特性实现线程安全的单例模式。 示例如下: ```java public enum SingletonEnum { INSTANCE; public void doSomething() { System.out.println("Singleton doing something..."); } } // 调用单例方法 SingletonEnum.INSTANCE.doSomething(); ``` 此代码展示了如何通过枚举来实现单例模式,并调用其方法。 #### 序列化与反序列化的处理 当枚举被序列化后再进行反序列化时,JVM 确保返回的是原始的枚举实例而非新创建的对象。这进一步增强了枚举作为单例使用的可靠性。 #### 遍历枚举值 每一个枚举都隐含提供了一个静态方法 `values()`,该方法能够返回按声明顺序排列的所有枚举常量组成的数组。配合增强型 for 循环即可轻松遍历所有可能取值。 示例代码如下: ```java for (Color color : Color.values()) { System.out.println(color); } ``` 这段程序会依次输出 `RED`, `GREEN`, 和 `BLUE`[^3]。 #### 方法重载于枚举 除了简单的命名外,还可以给枚举添加字段以及构造器,甚至自定义行为逻辑的方法。 例子展示带参数的复杂枚举结构及其操作函数: ```java public enum Planet { MERCURY(3.30E23), VENUS(4.87E24), EARTH(5.98E24); private final double mass; // kilograms Planet(double mass) { this.mass = mass; } public double getMass() { return mass; } } Planet earth = Planet.EARTH; System.out.printf("Earth's mass is %.2f kg%n", earth.getMass()); ``` 这里我们不仅限定了行星名称还附加了质量属性并通过 getter 访问[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2014Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值