`
chinakite
  • 浏览: 122802 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

说说Java中的枚举——定义枚举

阅读更多

上一篇说了Joshua Bloch大大提出的枚举模式,很好用但是好麻烦啊。如果你用过C/C++或是Pascal这样的语言的话一定会对它们的枚举类型有印象,例如在C/C++中我们可以这样定义:

enum weekday {
   MONDAY,
   TUESDAY,
   WENSDAY,
   THURSDAY,
   FRIDAY
};

然后在程序中就可以用MONDAY、TUESDAY这些变量了。这样多方便,但是Java 1.4以前的版本并没有提供枚举类型的支持,所以如果你是用JDK 1.4开发程序的话就只能像Joshua Bloch老大那样写了。从Java 5.0(代号为Tiger)开始,这种情况改变了,Java从语言层面支持了枚举类型。

枚举是Tiger的一个很重要的新特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示,它使用“enum”关键字来定义。

我们先来写一个简单的枚举类型的定义:

public enum WeekDay{
         MONDAY, TUESDAY, WENSDAY, THURSDAY, FRIDAY; //最后这个“;”可写可不写。
}

这和类、接口的定义很相像嘛!Tiger中的枚举类型就是一种使用特殊语法“enum”定义的类。所有的枚举类型是java.lang.Enum的子类。这是Tiger中新引入的一个类,它本身并不是枚举类型,但它定义了所有枚举类型所共有的行为,如下表:



 

注意:虽然所有的枚举类型都继承自java.lang.Enum,但是你不能绕过关键字“enum”而使用直接继承Enum的方式来定义枚举类型。编译器会提示错误来阻止你这么做。

WeekDay中定义的五个枚举常量之间使用“,”分割开来。这些常量默认都是“public static final”的,所以你就不必再为它们加上“public static final”修饰(编译器会提示出错),这也是为什么枚举常量采用大写字母来命名的原因。而且每一个常量都是枚举类型WeekDay的一个实例。你可以通过类似“WeekDay.MONDAY”这种格式来获取到WeekDay中定义的枚举常量,也可以采用类似“WeekDay oneDay = WeekDay.MONDAY”的方式为枚举类型变量赋值(你不能给枚举类型变量分配除了枚举常量和null以外的值,编译器会提示出错)。

作为枚举类型实例的枚举常量是如何初始化的呢?其实答案很简单,这些枚举常量都是通过Enum中定义的构造函数进行初始化的。

//java.lang.Enum中定义的构造函数,
//两个参数分别是定义的枚举常量名称以及它所在的次序。
protected Enum(String name, int ordinal) {
       this.name = name;
       this.ordinal = ordinal;
}

在初始化的过程中,枚举常量的次序是按照声明的顺序安排的。第一个枚举常量的次序是0,依此累加。

枚举类型除了拥有Enum提供的方法以外,还存在着两个隐藏着的与具体枚举类型相关的静态方法——values()和valueOf(String arg0)。方法values()可以获得包含所有枚举常量的数组;方法valueOf是java.lang.Enum中方法valueOf的简化版本,你可以通过它,根据传递的名称来得到当前枚举类型中匹配的枚举常量。

  • 大小: 74.2 KB
分享到:
评论

相关推荐

    Java期末复习——枚举与反射机制

    Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构

    java深入解析

    193 话题29 按部就班——初始化顺序与向前引用 206 第5章 类与接口 220 话题30 相辅相成——基本数据类型与包装类 220 话题31 分门别类——数组的阐述 232 话题32 规矩方圆——定义规范的接口类型 242 话题33 彻里至...

    Java开发详解.zip

    000000_【课程介绍 —— 写在前面的话】_Java学习概述笔记.pdf 010101_【第1章:JAVA概述及开发环境搭建】_JAVA发展概述笔记.pdf 010102_【第1章:JAVA概述及开发环境搭建】_Java开发环境搭建笔记.pdf 010201_【第2...

    Java典型模块

    1.3.2 在MyEclipse 8.5中创建、运行、调试和管理Java项目 1.4 小结 第2章 Java面向对象编程 2.1 面向对象的一些概念 2.1.1 面向对象涉及的概念 2.1.2 类和对象 2.2 面向对象的一些特性 2.2.1 继承特性 2.2.2 多态...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    Jworld@TW技术论坛版主,Java权威技术顾问与专业讲师,Java畅销书作者——林信良全新力作。  国内第一本Java 7,前期版本累计销量5万册。  《Java JDK 7学习笔记》针对Java SE 7新功能全面改版,无论是章节架构或...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    Java开发技术大全 电子版

    第4篇Java中的高级技术 第8章Java的多线程机制266 8.1线程的概念266 8.1.1多线程的特点266 8.1.2线程的状态267 8.2Thread类268 8.2.1Thread类的构造方法268 8.2.2Thread类的常用方法268 8.3多线程程序的编写...

    【05-面向对象(下)】

    • 零个到多个内部类、接口、枚举定义... • 零个到多个默认方法或类方法定义... •} 接口里的成分 •在定义接口时,接口里可以包含成员变量(只能是常量),方法(只能是抽象实例方法、类方法或...

    Visual C++实践与提高-COM和COM+篇『PDF』

    4.2.2.4 枚举存储对象中的元素 4.2.3 流对象和IStream接口 4.2.4 结构化存储示例——例程StructStore 4.3 永久对象 4.3.1 永久接口 4.3.2 永久对象编程——例程PersistText 4.3.3 永久对象客户编程——例程...

    javaSE代码实例

    第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 16.1.1 多线程编程的意义 343 16.1.2 定义自己的线程 344 16.1.3 创建线程对象 345 16.1.4 启动线程 347 16.1.5 同时使用多个线程 ...

    java中级笔试题-conjure:用于浏览器和微服务的强类型HTTP/JSONAPI

    的微服务架构——它已经在数百个存储库中进行了实战测试,并允许开发人员使用多种语言进行生产。 定义您的 API 一次,Conjure 将为 Java、TypeScript、Python 等生成惯用的客户端。生成的接口提供类型安全、干净的...

    课程设计实验——八皇后_VC++游戏

    用语句实现,可定义如下三个整型数组:a[8],b[15],c[24]。其中:  a[j-1]=1 第j列上无皇后  a[j-1]=0 第j列上有皇后  b[i+j-2]=1 (i,j)的对角线(左上至右下)无皇后  b[i+j-2]=0 (i,j)的对角线(左上至右下)...

    Visual C++ 2005入门经典--源代码及课后练习答案

    7.4.3 在类定义中指定默认的形参值 318 7.4.4 在构造函数中使用初始化列表 320 7.5 类的私有成员 320 7.5.1 访问私有类成员 323 7.5.2 类的友元函数 324 7.5.3 默认复制构造函数 326 7.6 this指针 328...

    asp.net知识库

    利用自定义属性,定义枚举值的详细文本 Web标准和ASP.NET - 第一部分 XHTML介绍 在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试...

    Visual assist X 1626(带注册机)

     过滤工具条,列表框支持输入过程中的内容过滤功能,可以将列表框内容限制为公共方法、资源、枚举等。  支持单词首字母缩写,输入一个缩写,Visual Assist X 将自动查找您所需要的符号。  速记,无需输入整个单词...

    Whole.Tomato.Visual.Assist.X.10.6.1823 2010年6月最新破解版

     过滤工具条,列表框支持输入过程中的内容过滤功能,可以将列表框内容限制为公共方法、资源、枚举等。  支持单词首字母缩写,输入一个缩写,Visual Assist X 将自动查找您所需要的符号。  速记,无需输入整个单词...

    Whole.Tomato.Visual.Assist.X.v10.6.1822 2010年4月最新破解补丁

     过滤工具条,列表框支持输入过程中的内容过滤功能,可以将列表框内容限制为公共方法、资源、枚举等。  支持单词首字母缩写,输入一个缩写,Visual Assist X 将自动查找您所需要的符号。  速记,无需输入整个单词...

    Whole.Tomato.Visual.Assist.X.10.7.1925.0 2012年12月14日 破解补丁 dll Cracked 最新破解版

     过滤工具条,列表框支持输入过程中的内容过滤功能,可以将列表框内容限制为公共方法、资源、枚举等。  支持单词首字母缩写,输入一个缩写,Visual Assist X 将自动查找您所需要的符号。  速记,无需输入整个...

Global site tag (gtag.js) - Google Analytics