`
chinakite
  • 浏览: 124524 次
  • 性别: 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期末复习——枚举与反射机制

    枚举类中的每个枚举成员都有一个默认的整型值,称为`ordinal`,表示其在枚举中的位置,从0开始。由于`Enum`类实现了`Comparable`接口,所以可以直接对枚举进行排序。 Java还提供了专门针对枚举的集合类:`EnumMap`...

    Java高新技术_java5的枚举的基本应用

    总结来说,Java 5引入的枚举类型极大地提高了代码的可读性和安全性,同时提供了灵活的抽象能力,允许我们在枚举中定义方法、属性和构造函数。通过使用枚举,开发者可以更好地管理常量,防止类型错误,并利用`switch`...

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    java大学教程——课件

    此外,课程还可能涉及Java标准库(JDK)中的核心类库,如IO流、日期时间API、反射机制、枚举等。掌握这些API的使用可以极大地提高编程效率。 对于初学者来说,熟悉Java开发环境Eclipse或IntelliJ IDEA的使用也很...

    MLDn学习笔记 —— JDK新特性(枚举)

    1. 基本定义:枚举在Java中通过`enum`关键字定义。例如,创建一个表示一周天的枚举类型: ```java public enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 2. 枚举实例:...

    Java实习报告——山寨QQ聊天工具设计

    - **代码②**:MessageType枚举类定义了消息类型的常量,例如LOGIN_MESSAGE(登录消息)和TEXT_MESSAGE(文本消息),便于在程序中识别和处理不同种类的消息。 - **代码③**:Student类(可能是示例或遗留代码)实现了...

    Java面试之——代码与编程题

    【Java面试之——代码与编程题】是Java程序员在求职过程中常常遇到的面试环节,主要考察应聘者对Java语言的理解和实际操作能力。面试中,面试官可能会提出各种类型的编程题目,包括但不限于设计模式、继承机制、内部...

    java应用程序——纸牌游戏发牌实现

    根据给定的信息,我们可以总结出以下关于“Java应用程序——纸牌游戏发牌实现”的相关知识点: ### 一、概述 本Java程序实现了一个简单的纸牌游戏发牌逻辑。该程序利用面向对象的思想,通过定义`Card`类来表示每张...

    java小游戏——“打飞机”源码

    例如,使用继承和多态性来设计不同的飞机和子弹类型,使用接口定义公共的行为,以及使用枚举来表示游戏状态。 在压缩包中的"DestroyedPlanes"可能是一个记录被击毁飞机的数据结构或者日志文件,它可能包含了游戏中...

    Java泛型枚举与For语句的简化写法PPT教案学习.pptx

    泛型枚举是Java中的一种枚举类型,它允许在枚举类型中定义泛型参数。泛型枚举可以使枚举类型更加灵活和通用。 在Java中,枚举类型可以使用泛型参数,例如: ```java public enum Color<T> { RED, GREEN, BLUE; ...

    java程序设计——基于JDK6和NetBeans实现第4章课后作业答案.pdf

    Java中的枚举是一种特殊的类,用于定义一组固定的常量。在第2个问题中,我们看到一个名为`T`的枚举,包含三个常量:`RED`, `GREEN`, `BLUE`。通过调用`values()`方法,我们可以获取枚举类型的全部实例,然后遍历并...

    java算法——玩家扑克牌

    在Java中,可以使用枚举类型(`enum`)来定义花色(如红桃、黑桃、梅花、方块)和点数(2到10、J、Q、K、A)。这样做的好处是枚举提供了固定的值,避免了错误的输入。 ```java public enum Suit { HEARTS, SPADES...

    java编码规范——关于java的命名规则、注视的写法等

    本文将详细介绍《Java编码规范》文档中的关键内容,包括命名规则、注释规范以及一些高级主题如设计模式和代码重构。 #### 二、一般规则与格式规范 在《Java编码规范》的第二章和第三章中,主要讨论了一般性的编码...

    java学习笔记(11) 第11 章 - 枚举和注解(csdn)————程序.pdf

    Java中的枚举(enum)和注解(Annotation)是两种重要的语言特性,它们在实际编程中有着广泛的应用。本章将深入探讨这两种概念,并通过示例来解释它们的使用。 11.1 需求分析 在创建季节(Season)对象时,我们发现...

    JDK5.0新特性(3)——枚举

    枚举实例可以作为类的静态成员使用,也可以在代码中通过`.name()`和`.ordinal()`方法获取其名称和在枚举中的位置。 3. 枚举方法: 除了默认的方法,我们还可以自定义枚举类的方法,增强枚举的功能。例如,添加一个...

    Java笔记——2017年3月3日

    2. **枚举**:枚举是Java 5新增的数据类型,用于定义一组相关的常量。枚举类不仅包含常量,还可以包含方法和实现的接口,使得枚举更像一个完整的类,提高了代码的规范性和可读性。 3. **静态导入**:静态导入允许你...

    java——面试题

    - `switch`语句的表达式可以是`byte`、`short`、`char`、`int`、`枚举类型`或者`Java 7及以后版本引入的字符串(String)常量`。`long`类型不支持,因为它不能隐式转换为`int`。 6. **short变量的加法运算**: - ...

Global site tag (gtag.js) - Google Analytics