Java枚举enum详解与示例
"Java枚举类型(enum)的使用方法及示例" 在Java编程语言中,枚举是一种特殊的类,用于定义固定的常量集合。它自JDK 1.5版本引入,为开发者提供了一种安全且易于管理的方式,来表示有限数量的值。与传统的用静态常量表示的方法相比,枚举类型更易读、更易维护,并且提供了更多的面向对象特性。 1. 定义枚举类型 在Java中,创建枚举类型的语法如下: ```java public enum EnumName { ENUM_CONSTANT1, ENUM_CONSTANT2, ENUM_CONSTANT3; } ``` 例如,定义一个交通灯颜色的枚举`Light`: ```java public enum Light { RED, GREEN, YELLOW; } ``` 2. 枚举类的默认属性和方法 每个枚举实例都隐式地具有以下属性和方法: - `name()`: 返回枚举常量的名称(字符串形式)。 - `ordinal()`: 返回枚举常量的顺序,通常是从0开始的索引。 3. 自定义枚举常量 枚举常量可以包含自己的字段和方法。例如,我们可以在枚举中添加一个表示颜色代码的`nCode`字段: ```java public enum Light { RED(1), GREEN(3), YELLOW(2); private int nCode; private Light(int nCode) { this.nCode = nCode; } @Override public String toString() { return String.valueOf(this.nCode); } } ``` 这样,每个枚举常量都有了自己的代码值,并且通过重写`toString()`方法,我们可以方便地获取这个值。 4. 使用枚举 枚举类型可以用于各种操作,包括: - switch语句:枚举类型可以直接用在`switch`语句中,作为条件判断。 - 集合操作:可以创建`EnumSet`和`EnumMap`,它们是专门为枚举设计的高效集合类。 - `EnumSet`:一个不包含重复元素的集合,所有元素必须来自同一个枚举类型。 - `EnumMap`:键由枚举类型定义,提供高效的映射操作。 例如,创建一个`EnumSet`并遍历其中的枚举值: ```java public class LightTest { public static void main(String[] args) { EnumSet<Light> trafficLights = EnumSet.allOf(Light.class); for (Light light : trafficLights) { System.out.println(light); // 输出颜色代码 } } } ``` 通过以上内容,我们可以看出Java的枚举类型不仅提供了静态常量的功能,还支持更丰富的对象行为和操作。它简化了代码,提高了可读性,并减少了出错的可能性,是Java中处理固定集合常量的最佳实践。
最近跟同事讨论问题的时候,突然同事提到我们为什么java 中定义的常量值不采用enmu 枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum 定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。
Java 中的枚举类型采用关键字enum 来定义,从jdk1.5才有的新类型,所有的枚举类型都是继承自Enum 类型。要了解枚举类型,建议大家先打开jdk 中的Enum 类简单读一下,这个类里面定义了很多protected 方法,比如构造函数,如果要使用这些方法我们可以把枚举类型定义到当前类中。每个枚举类型,都有自己的名字和顺序,当我们输出一个枚举类型的时候,会输入枚举类型的name ,具体可以参考下面的例子。
一、 通常定义常量方法
我们通常利用public final static 方法定义的代码如下,分别用1 表示红灯,3 表示绿灯,2 表示黄灯。
package com.csdn.myEnum;
public class Light {
/* 红灯 */
public final static int RED =1;
/* 绿灯 */
public final static int GREEN =3;
/* 黄灯 */
public final static int YELLOW =2;
}
二、 枚举类型定义常量方法
枚举类型的简单定义方法如下,我们似乎没办法定义每个枚举类型的值。比如我们定义红灯、绿灯和黄灯的代码可能如下:
public enum Light {
RED , GREEN , YELLOW ;
}
我们只能够表示出红灯、绿灯和黄灯,但是具体的值我们没办法表示出来。别急,既然枚举类型提供了构造函数,我们可以通过构造函数和覆写toString 方法来实现。首先给Light 枚举类型增加构造方法,然后每个枚举类型的值通过构造函数传入对应的参数,同时覆写toString 方法,在该方法中返回从构造函数中传入的参数,改造后的代码如下:
public enum Light {
// 利用构造函数传参
RED (1), GREEN (3), YELLOW (2);
// 定义私有变量
private int nCode ;
// 构造函数,枚举类型只能为私有
private Light( int _nCode) {
}
@Override
public String toString() {
return String.valueOf ( this . nCode );
}
}
三、 完整示例代码
枚举类型的完整演示代码如下:
package com.csdn.myEnum;
import java.util.EnumMap;
import java.util.EnumSet;
public class LightTest {
// 1. 定义枚举类型
public enum Light {
// 利用构造函数传参
RED (1), GREEN (3), YELLOW (2);
// 定义私有变量
private int nCode ;
// 构造函数,枚举类型只能为私有
private Light( int _nCode) {
this . nCode = _nCode;
}
剩余6页未读,继续阅读
- 粉丝: 3
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++标准程序库:权威指南
- Java解惑:奇数判断误区与改进方法
- C++编程必读:20种设计模式详解与实战
- LM3S8962微控制器数据手册
- 51单片机C语言实战教程:从入门到精通
- Spring3.0权威指南:JavaEE6实战
- Win32多线程程序设计详解
- Lucene2.9.1开发全攻略:从环境配置到索引创建
- 内存虚拟硬盘技术:提升电脑速度的秘密武器
- Java操作数据库:保存与显示图片到数据库及页面
- ISO14001:2004环境管理体系要求详解
- ShopExV4.8二次开发详解
- 企业形象与产品推广一站式网站建设技术方案揭秘
- Shopex二次开发:触发器与控制器重定向技术详解
- FPGA开发实战指南:创新设计与进阶技巧
- ShopExV4.8二次开发入门:解决升级问题与功能扩展