【Java】Enumeration Class 枚举类
枚举类 enum 对象是有限的确定的、属于类的(静态的)
适合定义一组常量
例如固定的一些事物:
- 季节
- 性别
- 状态
自定义枚举类的使用
public class EnumerationTest {
    /*
        枚举类的使用
        1 类的对象有限,确定的
        2 适合定义一组常量
        3 枚举只有一个对象就可以是单例模式的实现方式
     */
    public static void main(String[] args) {
        EnumerationClass status01 = EnumerationClass.STATUS01;
        System.out.println(status01);
        Integer statusID = status01.getStatusID();
    }
}
//  JDK5.0之前,编写我们自己的枚举类
//  JDK5.0之后,使用enum关键字声明枚举类
class EnumerationClass{
    // 自定义枚举类
    private String statusName;
    private Integer statusID;
    // 私有化构造器,不可调用new 创建
    private EnumerationClass(String statusName,Integer statusID){
        this.statusName = statusName;
        this.statusID = statusID;
    }
    // 声明我们的对象常量,这些对象允许被公开访问 public
    public static final EnumerationClass STATUS01 = new EnumerationClass("枚举类状态对象01",1001);
    public static final EnumerationClass STATUS02 = new EnumerationClass("枚举类状态对象02",1002);
    public static final EnumerationClass STATUS03 = new EnumerationClass("枚举类状态对象03",1003);
    public static final EnumerationClass STATUS04 = new EnumerationClass("枚举类状态对象04",1004);
    // 属性的setter & getter
    public String getStatusName() { return statusName; }
    public void setStatusName(String statusName) { this.statusName = statusName; }
    public Integer getStatusID() { return statusID; }
    public void setStatusID(Integer statusID) { this.statusID = statusID; }
    // toString 方法
    @Override
    public String toString() {
        return "EnumerationClass{" +
                "statusName='" + statusName + '\'' +
                ", statusID=" + statusID +
                '}';
    }
}
使用Enum声明枚举类:
public enum EnumerationClass {
    //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
    STATUS01("状态对象01",1001),
    STATUS02("状态对象02",1002),
    STATUS03("状态对象03",1003),
    STATUS04("状态对象04",1004);
    //  枚举对象也可以声明字段
    private String enumName;
    private Integer enumID;
    // 枚举对象也可以有构造器,这个构造器不可被外界访问
    EnumerationClass(String enumName, Integer enumID) {
        this.enumName = enumName;
        this.enumID = enumID;
    }
    // 也可以声明setter & getter
    public String getEnumName() { return enumName; }
    public void setEnumName(String enumName) { this.enumName = enumName; }
    public Integer getEnumID() { return enumID; }
    public void setEnumID(Integer enumID) { this.enumID = enumID; }
    @Override
    public String toString() {
        return "EnumerationClass{" +
                "enumName='" + enumName + '\'' +
                ", enumID=" + enumID +
                '}';
    }
}
Enum枚举父类 的常见方法

- values() 返回枚举类的对象数组,用来遍历所有枚举对象
- valueOf(String str)方法 ,获取字符串转换为枚举类的对象,字符串必须是对象的标识符,如果枚举类没有此字符枚举项,则发生不合理的参数异常
- toString()默认返回枚举对象名称
public class EnumerationTest {
    public static void main(String[] args) {
        // 根据参数名字返回枚举类的对应标识符的枚举对象,如果没有报不合理的参数异常
        EnumerationClass status04 = EnumerationClass.valueOf("STATUS04");
        System.out.println(status04);
        // 返回这个枚举类的所有枚举对象 是一个对象数组
        EnumerationClass[] instances = EnumerationClass.values();
        // 遍历所有枚举对象 ,可以查看有哪些枚举项
        for (EnumerationClass ec:instances) {
            System.out.println(ec); // 调用的toString方法 默认返回对象的表示名称,可以重写
        }
    }
}
使用枚举类实现接口
- 因为enum枚举类已经继承了Enum枚举总抽象类,和Object原型类,不能在继承任何类了
- 但可以实现接口
public enum EnumerationClass implements Plug{
    //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
    STATUS01("状态对象01",1001),
    STATUS02("状态对象02",1002),
    STATUS03("状态对象03",1003),
    STATUS04("状态对象04",1004);
    //  枚举对象也可以声明字段
    private String enumName;
    private Integer enumID;
    // 枚举对象也可以有构造器,这个构造器不可被外界访问
    EnumerationClass(String enumName, Integer enumID) {
        this.enumName = enumName;
        this.enumID = enumID;
    }
    // 也可以声明setter & getter
    public String getEnumName() { return enumName; }
    public void setEnumName(String enumName) { this.enumName = enumName; }
    public Integer getEnumID() { return enumID; }
    public void setEnumID(Integer enumID) { this.enumID = enumID; }
    @Override
    public String toString() {
        return "EnumerationClass{" +
                "enumName='" + enumName + '\'' +
                ", enumID=" + enumID +
                '}';
    }
    @Override
    public void plugMethod() {
        System.out.println("实现接口方法!!!");
    }
}
// 声明一个接口
interface Plug{
    void plugMethod(); // 接口方法
}
除了在枚举类里面实现同一的接口方法
也可以匿名实现
public enum EnumerationClass implements Plug{
    //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
    STATUS01("状态对象01",1001){
        @Override
        public void plugMethod(){
            System.out.println("匿名实现接口方法1");
        }
    },
    STATUS02("状态对象02",1002){
        @Override
        public void plugMethod(){
            System.out.println("匿名实现接口方法2");
        }
    },
    STATUS03("状态对象03",1003){
        @Override
        public void plugMethod(){
            System.out.println("匿名实现接口方法3");
        }
    },
    STATUS04("状态对象04",1004){
        @Override
        public void plugMethod(){
            System.out.println("匿名实现接口方法4");
        }
    };
    //  枚举对象也可以声明字段
    private String enumName;
    private Integer enumID;
    // 枚举对象也可以有构造器,这个构造器不可被外界访问
    EnumerationClass(String enumName, Integer enumID) {
        this.enumName = enumName;
        this.enumID = enumID;
    }
    // 也可以声明setter & getter
    public String getEnumName() { return enumName; }
    public void setEnumName(String enumName) { this.enumName = enumName; }
    public Integer getEnumID() { return enumID; }
    public void setEnumID(Integer enumID) { this.enumID = enumID; }
    @Override
    public String toString() {
        return "EnumerationClass{" +
                "enumName='" + enumName + '\'' +
                ", enumID=" + enumID +
                '}';
    }
}
// 声明一个接口
interface Plug{
    void plugMethod(); // 接口方法
}
【Java】Enumeration Class 枚举类的更多相关文章
- JAVA中的枚举类
		某些情况下一个类的对象是有限而且固定的,例如性别就只有两个类(考虑大众情况).因此这种实例有限而且固定的类,java里面叫枚举类.枚举类的关键字是enum,一些基本的命名规则和文件命名等细节和一般的类 ... 
- Java 基础 enum枚举类 的创建/使用/接口继承 ,以及手动创建枚举类的对象为:public static final
		笔记: import java.lang.*; /**一:枚举类 : enum Season implements info { s1(),s2(),s3(),s4() }; //s1--s4 放在S ... 
- Java笔记:枚举类
		1.一个类的实例是有限且固定的,这个类称为枚举类.比如季节类,只有四个对象(春.夏.秋.冬) 2.手动实现一个枚举类(1)通过private将构造器隐藏起来(2)把这个类的所有可能实例都使用priva ... 
- java基础41 枚举(类)
		1.概述 枚举:一些方法在运行时,它需要数据不能是任意的,而必须是一定范围内的值,可以使用枚举解决 2.枚举的格式 enum 类名{ 枚举值 } 例子 package com.dhb.enumerat ... 
- Java中的枚举类为何不能有public构造器
		声明:本博客为原创博客.未经同意.不得转载!原文链接为http://blog.csdn.net/bettarwang/article/details/27262809. 从Java 5開始有了枚举类, ... 
- Java学习笔记-枚举类
		实例有限且固定的类成为枚举类 枚举类的实现 早期时候的实现形式: public static final int SEASON_SPRING = 1; public static final int ... 
- java动态更新枚举类
		工作中遇到需要对枚举类的值进行动态更新 手动改不现实也不方便 现记录下来方便以后学习使用 1.在工程utils包中添加动态更新枚举类得工具类(根据自己得项目,放到指定位置调用就可以) 2.一开始陷入了 ... 
- 【Java基础】枚举类与注解
		枚举类与注解 枚举类的使用 当需要定义一组常量时,强烈建议使用枚举类. 枚举类的理解:类的对象只有有限个,确定的. 若枚举只有一个对象, 则可以作为一种单例模式的实现方式. 枚举类的属性: 枚举类对象 ... 
- java 数据类型:枚举类enum、对比方法compreTo()、获取名字.name()、获取对应值的枚举类Enum.valueOf()、包含构造方法和抽象方法的enum;实现接口;
		问题引入 为了将某一数据类型的值限定在可选的合理范围内,比如季节只有四个:春夏秋冬. 什么是枚举类 Java5之后新增了enum关键字(他与class,interface关键字地位相同)用来定义枚举类 ... 
- 【Java SE】枚举类和注解
		1.枚举类的使用 当类的对象由有限个,确定的时候,我们称这种类为枚举类.当需要定义一组常量时,建议使用枚举类.而当枚举类中只有一个对象时,可以使用单例模式. 1.1 enmu关键字 省略private ... 
随机推荐
- 【Socket】解决UDP丢包问题
			一.介绍 UDP是一种不可靠的.无连接的.基于数据报的传输层协议.相比于TCP就比较简单,像写信一样,直接打包丢过去,就不用管了,而不用TCP这样的反复确认.所以UDP的优势就是速度快,开销小.但是随 ... 
- vs code 中开发 .net5 mvc
			asp.net core mvc ------------ 安装vscode-solution-explorer,C# 2个扩展.遇到yes就点yes. 新建一个文件夹:D:\repos\Net5Mv ... 
- 什么是 SpringMvc?
			SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合. 
- python写文件,过滤空行,根据某一行打上标记
			import shutil import os ###第一步写文件 ''' with open('test.txt', 'w',encoding='utf-8') as f: f.write(&quo ... 
- python 将查询到数据,处理成包含列名和数据的字典类型数据
			try: self.connect_dbserver() self.cursor.execute(sql) res = self.cursor.fetchall() # 返回的是数组的类型 print ... 
- Xcode调试内存最新理解
			前提: Xcode 16.0 beta 设置 Scheme设置中勾选Malloc Scribble.Malloc Stack Logging. 这么做是为了在Memory Graph.Profile中 ... 
- 玉炜的iOS开发规范(12.14更新)
			苹果账号篇 1.新建一个新项目之后的bundle ID无论是否定没定,上架的账号如果没定,最好先写一个绝对用不上的名字,因为这个bundle ID一经确定会被绑定在当前你的苹果账号上,如果正好绑定的是 ... 
- RPC和心跳机制
			hadoop在节点间的内部通讯使用的是RPC,RPC协议把消息翻译成二进制字节流发送到远程节点,远程节点再通过反序列化把二进制流转成原始的信息. namenode与datanode之间的通信,jobt ... 
- unity中Shader实现地形中根据实际高度绘制等高线,剖切功能,颜色渐变等功能
			问题背景 在做地形模块时,需要根据实际地形高度画出世界相应的等高线,以及根据高度做颜色渐变,以及剖切功能. 解决方法 通过像素点在世界坐标系下的真实高度值来判断计算绘制等高线,剖切功能以及颜色渐变均有 ... 
- 工控CTF_MMS
			工控CTF_MMS 参考文章 https://blog.csdn.net/song123sh/article/details/127358610 概况 MMS工控协议是基于MMS和TCP等的基础上,开 ... 
