java定义枚举

本文深入解析了Java中枚举的两种定义方式,包括JDK5.0之前的自定义枚举类和使用enum关键字定义枚举类的方法。通过具体示例,如季节的定义,详细阐述了每种方式的具体实现步骤,帮助读者理解枚举类的构造和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java中,枚举的定义有两种方法:
方式一:JDK5.0之前,自定义枚举类
方式二:JDK5.0时,可以使用enum关键字定义枚举类

例如:举例定义一个季节,包含春夏秋冬,以及每个季节的描述。

方式一:

//自定义枚举类
class Season
{
    //1、声明Season对象的属性
    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 + '\'' +
                '}';
    }
}

方式二:

//自定义枚举类
enum  Season1
{

    //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 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 getSeasonDesc() {
        return SeasonDesc;
    }

}

要注意的是:
1、如果使用enum关键字,那么虽然没有显示的写上继承于哪一个类,那么它的父类是java.lang.Enum类。

### Java枚举类型的定义与使用 在Java中,枚举类型是一种特殊的类,通过`enum`关键字定义。它本质上是一个继承自`java.lang.Enum`的类[^1],因此具备了类的所有特性,例如可以包含字段、方法以及构造函数等。以下将详细介绍如何定义和使用Java中的枚举类型。 #### 定义枚举类型 枚举类型可以通过`enum`关键字定义,其基本语法如下: ```java public enum EnumName { CONSTANT1, CONSTANT2, CONSTANT3; } ``` 上述代码定义了一个名为`EnumName`的枚举类型,其中包含三个常量:`CONSTANT1`、`CONSTANT2`和`CONSTANT3`。每个枚举常量都是该枚举类型的实例,并且在编译时会被初始化为唯一的对象[^1]。 #### 枚举类型的构造函数与字段 除了简单的常量定义外,还可以为枚举类型添加构造函数、字段和方法。例如: ```java public enum Color { RED("Red"), GREEN("Green"), BLUE("Blue"); private String displayName; // 私有构造函数 Color(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } } ``` 在这个例子中,`Color`枚举类型包含三个常量:`RED`、`GREEN`和`BLUE`,并且每个常量都有一个对应的`displayName`字段。通过私有构造函数,可以在创建枚举常量时为其赋值[^1]。 #### 覆盖默认方法 枚举类型默认提供了一些常用方法,例如`toString()`和`valueOf()`。如果需要自定义行为,可以覆写这些方法。例如: ```java public enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; @Override public String toString() { return "Today is " + name().toLowerCase(); } } ``` 在上面的例子中,`DayOfWeek`枚举类型覆写了`toString()`方法,以返回更具可读性的字符串表示形式[^2]。 #### 使用枚举类型 枚举类型可以通过多种方式使用,例如直接访问常量、遍历所有常量或通过名称查找特定常量。示例如下: ```java // 直接访问常量 Color color = Color.RED; System.out.println(color.getDisplayName()); // 遍历所有常量 for (Color c : Color.values()) { System.out.println(c.getDisplayName()); } // 通过名称查找常量 Color green = Color.valueOf("GREEN"); System.out.println(green.getDisplayName()); ``` 此外,还可以通过接口的方式实现跨枚举的功能[^3]。例如: ```java public interface Drink { String getName(); } public enum Coffee implements Drink { ESPRESSO, LATTE, CAPPUCCINO; @Override public String getName() { return name().toLowerCase(); } } public enum Tea implements Drink { GREEN_TEA, BLACK_TEA, HERBAL_TEA; @Override public String getName() { return name().toLowerCase(); } } ``` 在上述代码中,`Coffee`和`Tea`两个枚举类型都实现了`Drink`接口,从而可以统一处理这两种类型的饮料[^3]。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值