文档章节

Enum枚举类

思悟修
 思悟修
发布于 2015/09/11 16:31
字数 666
阅读 247
收藏 6

一、概述

 enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式Class Enum<E extends Enum<E>>,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,在这里,每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

public enum EnumTest {
    MON, TUE, WED, THU, FRI, SAT, SUN;
}

这段代码实际上调用了7次 Enum(String name, int ordinal):

new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
    ... ...

二、自定义枚举属性方法

给 enum 对象加一下 value 的属性和 getValue() 的方法,构造方法覆盖默认isRest方法:

public enum EnumTest {
    MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
        @Override
        public boolean isRest() {
            return true;
        }
    },
    SUN(0) {
        @Override
        public boolean isRest() {
            return true;
        }
    };
 
    private int value;
    private EnumTest(int value) {
        //MON(1) value=1
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public boolean isRest() {
        return false;
    }
}

这里的value值标示的是枚举值定义时括号里的值,这个值不同与枚举ordinal()方法返回值,ordinal获取的是值的下标序号

枚举需要注意(详细看java.lang.Enum源码):

  1. 枚举可以使用switch分支语法

  2. 枚举类可以覆盖默认toString方法,默认toString返回name(MON)

  3. 枚举常量是单例的,所以直接调用==操作符 子类不可以重写该方法

  4. 因为枚举常量是单例的,所以不允许克隆

三、枚举和常量区别

枚举和常量都是用来标示一些常量,但是他们之间存在一定的区别:

1.枚举是一种数据类型而常量不是,也就是在实体中定义属性变量时可以是枚举变量但是无法将引用变量定义为常量(类似枚举值是类,而常量是无法改变值)

2.在动态反射生成对象时,类对象包含,枚举可以像正常变量使用而常量无法满足,同样在数据存储(hibernate)

3.常量无类型约束

四、总结

枚举有其特有的性质,它可以理解是特殊类的集合又在展现上拥有常量的方便性,补充了常量在作为实体对象属性上的缺点。

© 著作权归作者所有

思悟修
粉丝 5
博文 59
码字总数 43362
作品 0
杭州
私信 提问
Java中的Enum的使用与分析

示例: public enum EnumTest { } Java中枚举实现的分析: 示例: public enum Color{ } 显然, enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类...

绝影jy
2014/05/08
151
0
深入分析 Java 的枚举 enum

1 定义 enum全称为enumeration,中文意为枚举,枚举简单的说就是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。 创建枚举类型是需要用到enu...

JavaEdge
02/04
0
0
java(二十二)枚举

枚举类:实例有限而且固定的类。 在早期,使用一些静态常量来表示枚举,但存在很多问题:类型不安全、没有命名空间,打印输出的值没有具体意义。 jdk 1.5 以后添加了枚举类。用关键字enum来表...

胡脸脸
2016/01/27
57
0
java枚举的用法

转载:点击打开链接 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始的接口定义...

lwang_IT
2017/12/25
0
0
Java进级篇 - Java Enum的用法详解

用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 public enum ...

YOTOO
2014/05/19
711
1

没有更多内容

加载失败,请刷新页面

加载更多

秒杀系统思路

业务分析 技术挑战 请求响应要快:无论成功失败,需要尽快返回给用户 架构设计   前端:静态化   站点层:限制请求数   服务层:乐观锁写缓存   数据库CAP:读写高可用,一致性,扩容...

雷开你的门
4分钟前
4
0
最全的教育行业大数据解决方案,个个针对痛点

大数据的悄然兴起也带动了教育行业的革新,移动教育、云课堂等的出现,使得教育行业再次成为了可以中长期保持高景气的行业。然而,初涉数据领域的教育行业同时也面临着相当大的难题,还需要更...

朕想上头条
8分钟前
3
0
预约模块设计分析

1.预约功能描述: 预约是小程序中常见的一种商品管理系统,商家可根据商品或服务的特性,灵活设置预约细节,为用户提供线上预约服务,如场地预约,商品预定等,实现高效经营。 预约场景: ...

鱼煎
11分钟前
3
0
阿里云日志服务构建网站实时分析大盘实战

场景分析 挖掘数据价值是当前企业级网站共同面临的问题。买买网是一个电商平台网站,每天拥有大量的用户访问和购买记录。为了引导用户直接消费,提升购买率和转化率,不同的用户类别需要推荐...

阿里云官方博客
12分钟前
2
0
TL665xF-EasyEVMTL665xF-EasyEVM开发板硬件处理器、NAND FLASH、RAM

广州创龙结合TI KeyStone系列多核架构TMS320C665x及Xilinx Artix-7系列FPGA设计的TL665xF-EasyEVM开发板是一款DSP+FPGA高速大数据采集处理平台,其底板采用沉金无铅工艺的6层板设计,适用于高...

Tronlong创龙
16分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部