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 + '\'' +
                '}';
    }
}
相关推荐
0白露1 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.2 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐2 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
·薯条大王2 小时前
MySQL联合查询
数据库·mysql
战族狼魂2 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6223 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL3 小时前
ZGC初步了解
java·jvm·算法
杉之4 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
morris1314 小时前
【redis】redis实现分布式锁
数据库·redis·缓存·分布式锁
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq