Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍

枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似 的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的 定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。

举个例子来说明 一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现。

清单 1. 常量定义

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 方式来重新定义 :

enum RainbowColor { RED, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE }

从上面的定 义形式来看,似乎 Java 中的枚举类型很简单,但实际上 Java 语言规范赋予枚举类型的功能非常的强大,它 不仅是简单地将整形数值转换成对象,而是将枚举类型定义转变成一个完整功能的类定义。这种类型定义的扩 展允许开发者给枚举类型增加任何方法和属性,也可以实现任意的接口。另外,Java 平台也为 Enum 类型提 供了高质量的实现,比如默认实现 Comparable 和 Serializable 接口,让开发者一般情况下不用关心这些细 节。

回到本文的主题上来,引入枚举类型到底能够给我们开发带来什么样好处呢?一个最直接的益处 就是扩大 switch 语句使用范围。5.0 之前,Java 中 switch 的值只能够是简单类型,比如 int、long、 char, 有了枚举类型之后,就可以使用对象了。这样一来,程序的控制选择就变得更加的方便,看下面的例子 :

清单 2. 定义 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 语句就根据此来进行执行跳转。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索颜色
, static
, enum
, java switch
, 类型
, 常量
, public
, 图片enum汇编语言
, java 枚举
, java枚举类型enum
, java枚举类enum用法
, 数值
, java枚举类型定义
java枚举
java枚举类型enum用法、java enum类型、java enum string类型、java枚举类型enum、java是强类型语言,以便于您获取更多的相关知识。

时间: 2024-12-02 17:40:34

Java 语言中 Enum 类型的使用介绍的相关文章

java语言中new A( ).B( )意思是不是A类的一个对象调用B方法

问题描述 java语言中new A( ).B( )意思是不是A类的一个对象调用B方法 java语言中new A( ).B( )意思是不是A类的一个对象调用B方法如果是new A( ).B( ).......N( )呢这样符合java语法规范吗 解决方案 调用A对象的B方法,因为如果A类中的B方法不是静态方法,那么外面想要调用的话就必须要先将A实例化,也就是是 new A(),之后调用它的B方法,也就是new A( ).B( ).这个是对象匿名的用法,是符合规范的.使用这种方法的话,就不需要将B方

c语言-C语言中float类型浮点数

问题描述 C语言中float类型浮点数 请问C语言中float类型浮点数的阶码为什么要使用移码表示,这样表示的优点是什么? 解决方案 浮点数的表示中为什么要用移码表示阶码? 解决方案二: 如果阶码(指数)也用补码来表示,就会使得一个浮点数中出现两个符号位:浮点数自身的和浮点数指数部分的.这样的结果是,在比较两个浮点数大小时,无法像比较整数时一样使用简单的无逻辑的二进制比较. http://www.zhihu.com/question/24115452 解决方案三: 因为浮点数正负之分啊

java语言中for循环和while循环有什么区别?

问题描述 java语言中for循环和while循环有什么区别? java语言中for循环和while循环有什么区别?一般应聘的公司用哪个比较多?是不是不会while循环也没事. 解决方案 是的,两个没什么区别.就好比一个肾也能活.虽然一般应聘的公司的程序员都有两个肾,但是如果你卖掉一个也没事. 解决方案二: 跳出while/for循环 for(xx;xx;xx){ ? ?? break ;//跳出for循环 ? } ? ? while(){ ? ??? break;跳出while循环 ? } =

java语言中if语句怎么用?为什么要else?

问题描述 java语言中if语句怎么用?为什么要else? java语言中if语句怎么用?为什么要else?if (i>10); ...if(i<10);...这么写不行么 解决方案 你为什么要长腿,半身不遂躺在床上不也一样活么 解决方案二: 这个里面涉及到性能的问题,两个if需要判断两次,而else的话,只需要判断if是否成立即可 解决方案三: 当然可以,可是 if(i<10) 有8个字母,而else只有4个,你这是简单的,有些更长,内容更多肿么办? 解决方案四: PHP If...E

java语言中 swing的优略(2014/3/24)

问题描述 java语言中 swing的优略,现在深入学习swing有用吗? 解决方案 曾经做过swing的开发设计 ,个人觉得性能上确实不见得有多好,但使用的话,也没有多大影响.而且,swing 整个架构的设计 ,我觉得还是很不错的. 另外再补充一个事:以前在甲方的时候,让乙方的开发人员写一个excel解析成特定格式的文件的功能,且需要是桌面程序的那种,结果当时的开发人员自称有三年开发经验,却回一句,只会写web.我一听觉得很无语,然后到第二天,我自己把这一块做出来.有些东西,你懂,不能说明什么

C语言中while与do-while的介绍与注意事项_C 语言

一.while和do-while的简介  1). while语句  语法:  while(表达式){  循环体;  } 循环过程:  1.先判断表达式,是否为真,如果为真跳转到2,否则跳转到3  2.执行循环体,执行完毕,跳转到1  3.跳出循环 2). do-while语句 语法:  do{  循环体;   }while(表达式);  注意:这个while后面的小括号必须接; 循环过程:  1.先执行循环体,执行完毕跳转到2  2.判断表达式的结果是否为真,如果为真,跳转到1,否则跳转到3  

深入谈谈java的枚举(enum)类型_java

前言 在大家日常编程中,往往存在着这样的"数据集",它们的数值在程序中是稳定的,而且"数据集"中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的"数据集",春夏秋冬四个数据元素组成了四季的"数据集".在java中如何更好的使用这些"数据集"呢?因此枚举便派上了用场 枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值. 枚举(enum)实

Java语言中的IO系统

  Java的核心库java.io提供了全面的IO接口,包括:文件读写,标准设备输出等等.Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入.在具体使用中很多初学者对Java.io包的使用非常含糊,本文将详细解说关于Java.io的使用. 1.stream 代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO系统中,所有的stream(包括Input和Out stream)都包括两种类型: 1.1以字节为导向的stream 以字

Java语言入门教程(六):Java语言中的static修饰符

在Java类中,我们常常会看到static关键字,往往被称为静态的.Static修 饰符可以用来修饰数据成员,方法成员,但是不能修饰类(此处指外部类),不 能修饰构造方法.如: package com.csst.vo; public class User { private String name; private static int count; public String getName() { return name; } public void setName(String name)