java枚举类型

Wesley13
• 阅读 675

java枚举类型enum

枚举类型是java 5新增特性的一部分,是一种特殊的数据类型(既是一种类类型但是又比类类型多些特殊的约束)

枚举定义的方式:

public enum Day{
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

定义枚举类型使用的关键字是enum,与class类似。一般枚举类型的值都是大写的字母,多个值之间以逗号分隔。
枚举类型可以单独的定义,也可以定义在其他类内部。

使用方式:
最简单的就是枚举值的直接引用

public static void main(String[] args){
    Day day = day.MONDAY;
}

实现原理
在使用enum关键字创建枚举类型并编译后,编译器会生成一个相关的类,这个类继承了java API中的java.lang.Enum类。
也就是说实际enum枚举类型是一个继承java.lang.Enum的类。枚举类型中的枚举值,编译后其实都枚举类型的对象,在静态块中初始化。

Enum抽象类的常见方法
int compareTo(E o)           比较此枚举与指定对象的顺序,返回该枚举序号减去指定枚举序号
boolean equals(Object o)         当指定对象等于此枚举常量时,返回true
Class<?> getDeclaringClass()      返回与此枚举常量的枚举类型相对应的Class
String name()                                        返回此枚举常量名称
int ordinal()                                            返回枚举常量的序数(初始为0)
String toString()                                     返回枚举常量的名称
static<T extends Enum> T static valueOf(Class enumType,String name)                             返回带指定名称的指定枚举类型的枚举常量

枚举类型继承Enum,编译后生成values(),values()方法的作用就是获取枚举类中的所有变量,并作为数组返回
valueOf(String name) 与Enum类中的方法类似,获取对应的枚举对象

枚举类型的进阶使用
枚举类型本质上来说就是一个类,也可以跟普通类一样,定义构造方法、成员变量、普通方法,也可以重写Enum的方法。
此外,还可以定义抽象方法,使具体枚举值实现抽象方法,以便产生不同行为。

public enum EnumDemo{
    FIRST{
        public String getInfo(){
        return "FIRST TIME";
    }
},

SECOND{
        public String getInfo(){
        return "SECOND TIME";
    }
}

    //定义抽象方法
    public abstract String getInfo();
}

由于单继承的原因,enum类不能再继承其他类,但不妨碍它实现接口,因此enum类同样可以实现多接口。

interface food{
    void eat();
}

interface sport{
    void run();
}

public enum EnumDemo2 implements food,sport{
    FOOD,
    SPORT,
    ; //这里有分隔符


    @Override
    public void eat(){
        System.out.println("eat.....");
    }

    @Override
    public void run() {
    System.out.println("run.....");
    }

}

枚举与switch
switch对枚举类型也进行了支持

enum Color {GREEN,RED,BLUE}

public class EnumDemo4 {

    public static void printName(Color color){
        switch (color){
            case BLUE: //无需使用Color进行引用
                System.out.println("蓝色");
                break;
            case RED:
                System.out.println("红色");
                break;
            case GREEN:
                System.out.println("绿色");
                break;
        }
    }


    public static void main(String[] args){
        printName(Color.BLUE);
        printName(Color.RED);
        printName(Color.GREEN);
    }
}

以上学习内容感谢 https://www.cnblogs.com/alter888/p/9163612.html

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java枚举类型enum的使用
java枚举类型enum的使用最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用publicfinalstatic 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
lucien-ma lucien-ma
2年前
Java 实用类
实用类枚举MathRandomStringStringBuffer日期类枚举枚举(Enum)是一种有确定取值区间的数据类型,它本质上是一种类,具有简洁、安全、方便等特点。可以这样理解,枚举的值被约束到一个特定的范围,只能取这个范围以内的值。我们为什么要用枚举呢?我们在描述对象的一些属性特征时,可选择的值是一个特定范围的,不能随便定义。比如性别只
Wesley13 Wesley13
2年前
java枚举
https://www.cnblogs.com/hyl8218/p/5088287.html摘抄并自查语法(定义)创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类。枚举类符合通用模式ClassEnum<EextendsEnum<E,而E表示枚举类型的名称。枚举类型的每一
Wesley13 Wesley13
2年前
Java枚举的小知识点
enum是jdk1.5引入的,使用它可以创建枚举类型,就像使用class创建类一样。enum关键字创建的枚举类型默认是java.lang.Enum(一个抽象类)的子类用法1常量一般定义常量都是publicstaticfinal…,现在可以把相关常量都放在一个枚举类里,而且枚举比常量提供更多方法1.enumsea
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
Java分享笔记:自定义枚举类 & 使用enum关键字定义枚举类
  在JDK1.5之前没有enum关键字,如果想使用枚举类,程序员需要根据Java语言的规则自行设计。从JDK1.5开始,Java语言添加了enum关键字,可以通过该关键字方便地定义枚举类。这种枚举类有自己的程序编写规则,并且具有一些特殊方法。  下面是笔者分别针对自定义枚举类和enum枚举类的程序设计。\1\自定义枚举类
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这