起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 一文读懂Java枚举类型有什么用

一文读懂Java枚举类型有什么用

时间:2022-08-14 14:43:29来源:零基础学Java 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java枚举类型有什么用

前言: Java枚举类型有什么用?IT培训网小编来告诉大家。 Java枚举的定义 类似类(class)和接口(interface)的定义,Java提供enum关

Java枚举类型有什么用?IT培训网小编来告诉大家。

Java枚举的定义

类似类(class)和接口(interface)的定义,Java提供enum关键字用来定义枚举类,在IDEA中创建枚举类的菜单如下:

同样定义一个季节的枚举类, 代码可以简洁如下:

package cn.osxm.jcodef.func.base; public enum SeasonEnum { SPRING, SUMMER, AUTUMN, WINTER }

在枚举类中直接列出常量,常量遵循全部大写的规则。在上面的枚举类示例代码中,SPRING, SUMMER, AUTUMN, WINTER 是SeasonEnum的成员。

枚举成员默认是final、public、static (所以可以使用SeasonEnum.SPRING方式调用枚举成员)

每一个枚举类型成员都可以看作是枚举类的实例 (SeasonEnum.SPRING的类型也是SeasonEnum)

在JUnit使用测试如下:

@Test public void enumBase() { SeasonEnum season = SeasonEnum.SPRING; Assert.assertTrue(season.equals(SeasonEnum.SPRING)); }

Java 枚举类的特性

Java枚举类的特性有:

枚举可以实现接口,但不能继承接口,也不能被继承。

枚举类是final的,所以不能继承。

枚举类的构造方法是私有的

枚举成员是静态、final和public

枚举成员是枚举类的实例

但是从上面SeasonEnum枚举类的定义来看,完全看不出这些特性,这些特性是怎么来的呢? 请看下面的原理探求。

Java枚举类实现的原理探求

ava枚举类型的奥秘就在编译阶段,枚举类在编译后会生成了一个扩展java.lang.Enum的类。这个可以通过JDK自带的javap工具来反编译生成的.class文件。对上面的生成的SeasonEnum.class文件进行反编译,因为这个文件的包路径是cnosxmjcodeffuncbase,所以在命令行使用如下命令:

javap -p cnosxmjcodeffuncbaseSeasonEnum.class

-p参数的意思是反编译代码中包含私有的方法, p是private的意思。

从控制台输出的反编译后的源码可以看出:

自定义的枚举类会自动继承java.lang.Enum类

每个成员变量都会被转换为 private static final的枚举类型的实例

自动添加private的构造函数 从反编译后的源码就不难理解Enum的特性了。

注意: 使用专门的Java反编译工具,比如JD GUI、luyten等对Eumn进行反编译的效果接近源码的效果,无法看到继承等特性,JD-GUI反编译的效果和源码时一致的,这也说明使用JD GUI来进行实际的反编译还是不错的。

文章出自:http://qh.itpxw.cn/peixun/software/2022123670.html

文章标题:一文读懂Java枚举类型有什么用



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容