Java,面向对象,枚举类

枚举类型本质上也是一种类,只不过这个类的对象是有限的、固定的几个,不能让用户随意创建。
场景:
开发中,如果针对于某个类,它的实例的个数是确定的。则推荐将此类声明为枚举类。
如果枚举类的实例只有一个,则可以看作是单例的实现方式。
在jdk5.0之前,使用 自定义枚举类的方法。步骤如下:
1. 私有化类的构造器
2. 声明当前类的对象的实例变量 , 要用 final 修饰
3. 提供 get 方法
4. 创建类的实例 // 要用 psf public static final )修饰,变为全局常量
以季节的枚举为例:

java 复制代码
//自定义枚举类
class Season{
    //2.声明当前类的对象的实例变量,要用final修饰
    private final String seasonName;//季节的名称
    private final String seasonDesc;//季节的描述
    //1.私有化类的构造器
    private Season(String seasonName,String seasonDesc)
    {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.提供get方法
    public String getSeasonName()
    {
        return seasonName;
    }

    public String getSeasonDesc()
    {
        return seasonDesc;
    }
    //4.创建类的实例//要用psf(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("冬天","寒冷的季节");


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

在jdk5.0时,加入使用 enum定义枚举类。步骤如下:
1. 创建对象,必须在枚举类的开头声明多个对象。对象之间使用逗号隔开。
2. 声明当前类的对象的实例变量 , 要用 final 修饰
3. 私有化类的构造器
3. 提供 get 方法
还是以季节的枚举为例:

java 复制代码
//jdk5.0中使用enum关键字定义枚举类

enum Season1

{
    //1.创建对象,必须在枚举类的开头声明多个对象。对象之间使用逗号隔开。

    Spring("春天","花开的季节"),

    Summer("夏天","炎热的季节"),

    Autumn("秋天","丰收的季节"),

    Winter("冬天","寒冷的季节");

    //2.声明当前类的对象的实例变量,要用final修饰

    private final String seasonName;//季节的名称

    private final String seasonDesc;//季节的描述

    //3.私有化类的构造器

    private Season1(String seasonName,String seasonDesc)

    {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }

    //3.提供get方法

    public String getSeasonName()

    {
        return seasonName;
    }

  
    public String getSeasonDesc()

    {
        return seasonDesc;
    }

}

Enum类:
①使用enum定义的枚举类,默认其父类是java.lang.Enum类。(所以不能再定义其他父类)
②Enum类中的常用方法:
(如果sout输出为对象名,即默认为调用对象名.toString( )方法)
String toString( ) : 默认返回的是常量名(对象名),可以继续手动重写该方法。
String name( ) : 默认返回当前枚举对象的名称,当toString被重写了,想获得枚举类对象的名称,即用name( )
static 枚举类型 values( ) : 返回枚举类型的对象数组。该方法可以很方便的遍历所有的枚举值,为静态方法。
具体的使用如下:(结果为四个季节(即四个对象名))

java 复制代码
Season1[] values = Season1.values();
for (int i = 0; i < values.length; i++)

{
    System.out.println(values[i]);
}

static 枚举类型 valueof( String name ) : 返回当前枚举类对象名为name的枚举对象。(如果枚举类中不存在名为name的对象,则报错。)
int ordinal( ) : 返回当前枚举常量的次序号,默认从零开始。(次序号即在枚举类中声明位置的排序)
枚举类实现接口:
情况①:枚举类实现接口,在枚举类中重写接口中的抽象方法。当通过不同的枚举类的对象调用此方法时,执行的时是一个方法。
情况②:枚举类实现接口,在枚举类的每个对象中重写接口中的方法。操作:在对象后面加上{},在{}里面重写接口中的方法,即为在对象中重写接口中的方法。
具体操作如下:

java 复制代码
public class SeasonTest2
{

}


interface Info
{
    void show();
}
enum Season2 implements Info
{
    //1.创建对象,必须在枚举类的开头声明多个对象。对象之间使用逗号隔开。
    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("冬");
        }
    };
    //2.声明当前类的对象的实例变量,要用final修饰
    private final String seasonName;//季节的名称
    private final String seasonDesc;//季节的描述
    //3.私有化类的构造器
    private Season2(String seasonName,String seasonDesc)
    {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.提供get方法
    public String getSeasonName()
    {
        return seasonName;
    }


    public String getSeasonDesc()
    {
        return seasonDesc;
    }


    @Override
    public String toString()
    {
        return "Season2{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
相关推荐
Dovis(誓平步青云)27 分钟前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
tianyu23441 分钟前
Java 正则表达式终极指南:从 Pattern 到 Matcher,从双重转义到性能优化,一篇全搞定
java·开发语言·正则表达式·group·find·pattern·matcher
caimouse2 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
Emily156853598703 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧8 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡8 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管8 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅8 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
倔强的石头1068 小时前
向量数据库从相似度检索走向融合数据底座
数据库
AI绘画哇哒哒8 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent