java枚举类型

Wesley13
• 阅读 493

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

点赞
收藏
评论区
推荐文章
技术小男生 技术小男生
4个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
4个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
blmius blmius
1年前
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
1年前
Java枚举的小知识点
enum是jdk1.5引入的,使用它可以创建枚举类型,就像使用class创建类一样。enum关键字创建的枚举类型默认是java.lang.Enum(一个抽象类)的子类用法1常量一般定义常量都是publicstaticfinal…,现在可以把相关常量都放在一个枚举类里,而且枚举比常量提供更多方法1.enumsea
Wesley13 Wesley13
1年前
Java枚举使用场景
用法一:常量Java代码 1publicenumColor{2RED,GREEN,BLANK,YELLOW3}用法二:switchJDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。Java
Wesley13 Wesley13
1年前
java面试 (六)
1 String.split(Stringregex),传入的参数是正则表达式,有一些特殊字符(比如.\\()\\|等)需要转义。2 关于枚举类型,一般用作常量,理想情况下,枚举中的属性字段是私有的,并在私有构造函数中赋值,没有对应的Setter方法,最好加上final修饰符。publicenumPer
Wesley13 Wesley13
1年前
java枚举
https://www.cnblogs.com/hyl8218/p/5088287.html摘抄并自查语法(定义)创建枚举类型要使用enum关键字,隐含了所创建的类型都是java.lang.Enum类的子类。枚举类符合通用模式ClassEnum<EextendsEnum<E,而E表示枚举类型的名称。枚举类型的每一
Wesley13 Wesley13
1年前
Java中枚举的线程安全性及序列化问题
JavaSE5提供了一种新的类型Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。本文将深入分析枚举的源码,看一看枚举是怎么实现的,他是如何保证线程安全的,以及为什么用枚举实现的单例是最好的方式(https://www.oschina.net/act
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为