您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

java基础学习之如何使用Enum类型

2025/11/13 12:01:56发布54次查看
本篇文章给大家带来的内容是介绍在java中如何使用enum 类型。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助。
一、enum 类型的介绍
枚举类型(enumerated type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为声明的变量提供更大的取值范围。
举个例子来说明一下,如果希望为彩虹描绘出七种颜色,你可以在 java 程序中通过常量定义方式来实现。
public static class rainbowcolor {        // 红橙黄绿青蓝紫七种颜色的常量定义   public static final int red = 0;    public static final int orange = 1;    public static final int yellow = 2;    public static final int green = 3;    public static final int cyan = 4;    public static final int blue = 5;    public static final int purple = 6; }
使用的时候,你可以在程序中直接引用这些常量。但是,这种方式还是存在着一些问题。
类型不安全
由于颜色常量的对应值是整数形,所以程序执行过程中很有可能给颜色变量传入一个任意的整数值,导致出现错误。
没有命名空间
由于颜色常量只是类的属性,当你使用的时候不得不通过类来访问。
一致性差
因为整形枚举属于编译期常量,所以编译过程完成后,所有客户端和服务器端引用的地方,会直接将整数值写入。这样,当你修改旧的枚举整数值后或者增加新的枚举值后,所有引用地方代码都需要重新编译,否则运行时刻就会出现错误。
类型无指意性
由于颜色枚举值仅仅是一些无任何含义的整数值,如果在运行期调试时候,你就会发现日志中有很多魔术数字,但除了程序员本身,其他人很难明白其意义。
二、如何定义 enum 类型
     为了改进 java 语言在这方面的不足弥补缺陷,5.0 版本 sdk 发布时候,在语言层面上增加了枚举类型。枚举类型的定义也非常的简单,用 enum 关键字加上名称和大括号包含起来的枚举值体即可,例如上面提到的彩虹颜色就可以用新的 enum 方式来重新定义:
从上面的定义形式来看,似乎 java 中的枚举类型很简单,但实际上 java 语言规范赋予枚举类型的功能非常的强大,它不仅是简单地将整形数值转换成对象,而是将枚举类型定义转变成一个完整功能的类定义。这种类型定义的扩展允许开发者给枚举类型增加任何方法和属性,也可以实现任意的接口。另外,java 平台也为 enum 类型提供了高质量的实现,比如默认实现 comparable 和 serializable 接口,让开发者一般情况下不用关心这些细节。
回到本文的主题上来,引入枚举类型到底能够给我们开发带来什么样好处呢?一个最直接的益处就是扩大 switch 语句使用范围。5.0 之前,java 中 switch 的值只能够是简单类型,比如 int、byte、short、char, 有了枚举类型之后,就可以使用对象了。这样一来,程序的控制选择就变得更加的方便,看下面的例子:
定义 enum 类型
// 定义一周七天的枚举类型         public enum weekdayenum { mon, tue, wed, thu, fri, sat, sun }  // 读取当天的信息weekdayenum today = readtoday();  // 根据日期来选择进行活动switch(today) {  mon: do something; break;  tue: do something; break;  wed: do something; break;  thu: do something; break;  fri: do something; break;  sat: play sports game; break;  sun: have a rest; break; }
对于这些枚举的日期,jvm 都会在运行期构造成出一个简单的对象实例一一对应。这些对象都有唯一的 identity,类似整形数值一样,switch 语句就根据此来进行执行跳转。
如何定制 enum 类型
除了以上这种最常见的枚举定义形式外,如果需要给枚举类型增加一些复杂功能,也可以通过类似 class 的定义来给枚举进行定制。比如要给 enum 类型增加属性,可以像下面这样定义:
// 定义 rss(really simple syndication) 种子的枚举类型public enum newsrssfeedenum {    // 雅虎头条新闻 rss 种子   yahoo_top_stories(<a href="http://rss.news.yahoo.com/rss/topstories"><code>http://rss.news.yahoo.com/rss/topstories</code></a>),        //cbs 头条新闻 rss 种子   cbs_top_stories(<a href="http://feeds.cbsnews.com/cbsnewsmain?format=xml"><code>http://feeds.cbsnews.com/cbsnewsmain?format=xml</code></a>),        // 洛杉矶时报头条新闻 rss 种子   latimes_top_stories(<a href="http://feeds.latimes.com/latimes/news?format=xml"><code>http://feeds.latimes.com/latimes/news?format=xml</code></a>);            // 枚举对象的 rss 地址的属性   private string rss_url;            // 枚举对象构造函数   private newsrssfeedenum(string rss) {        this.rss_url = rss;    }            // 枚举对象获取 rss 地址的方法   public string getrssurl() {        return this.rss_url;    } }
上面头条新闻的枚举类型增加了一个 rss 地址的属性 , 记录头条新闻的访问地址。同时,需要外部传入 rss 访问地址的值,因而需要定义一个构造函数来初始化此属性。另外,还需要向外提供方法来读取 rss 地址。
以上就是java基础学习之如何使用enum类型的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product