Java中的枚举
枚举通过enum关键字进行定义。实际上当定义一个枚举类型的时候,该类型默认继承了Enum类。
枚举的定义格式如下:
enum Color
{
RED,BLUE,GREEN;
}
下面演示一个枚举变量的声明和输出:
public static void main(String[] args) throws Exception
{
Color c = Color.RED;
System.out.println(c);
}
当我们要遍历所有的枚举类型时,可以先将其转换为一个数组,然后用foreach语法进行输出。
public static void main(String[] args) throws Exception
{
Color[] colors = Color.values();
for(Color color : colors)
{
System.out.println(color);
}
}
Enum类的构造函数如下:
Enum(String name, int ordinal)
因为所有的枚举类型都默认继承Enum,所以上面的代码实际上默认调用了该构造函数。name的值就是RED,BLUE或GREEN,而ordinal的值从0开始。所以,下面的代码演示了每个枚举变量的name和ordinal值。
public static void main(String[] args) throws Exception
{
Color[] colors = Color.values();
for(Color color : colors)
{
System.out.println(color.ordinal() + ":" + color.name());
}
}
输出结果为:
0:RED
1:BLUE
2:GREEN
我们在定义枚举类的时候,也可以定义构造函数。因为枚举类的实例必须是有限的个数(本文中Color中只有3种颜色),所以,构造函数必须私有化。
enum Color
{
RED("红色"),BLUE("蓝色"),GREEN("绿色"); private String alias;
private Color(String alias)
{
this.alias = alias;
}
public String getAlias()
{
return this.alias ;
} }
因为定义了带参数的构造函数,所以在实例化枚举实例的时候,必须传入参数。
此时用下面的代码测试:
public static void main(String[] args) throws Exception
{
Color[] colors = Color.values();
for(Color color : colors)
{
System.out.println(color.ordinal() + ":" + color.name() + "("+color.getAlias()+")");
}
}
利用上面的特性,我们可以设计一个表示状态的枚举。如我们想定义一个会员状态的枚举类,会员状态有:待激活(0)、已激活(1)、锁定(-1)这三种状态。我们已经知道了,枚举变量有ordinal()方法可以提取该枚举变量的序号,然而这个数值只是代表该枚举序号,从0开始,显然无法表示-1,0,1这三种状态。这里可以借助构造方法来实现我们的需求:
enum MemberState
{
LOCKED(-1),READY(0),ACTIVED(1); private Integer code ; private MemberState(Integer code)
{
this.code = code;
} public Integer getCode()
{
return this.code;
}
}
测试代码:
public class Main
{
public static void main(String[] args)
{
for(MemberState item : MemberState.values())
{
System.out.println("序号:"+item.ordinal());
System.out.println("状态:"+item.name());
System.out.println("代码:"+item.getCode());
System.out.println("----------");
}
System.out.println("Main Done//~~");
}
}
输出结果:
序号:0
状态:LOCKED
代码:-1
----------
序号:1
状态:READY
代码:0
----------
序号:2
状态:ACTIVED
代码:1
----------
Main Done//~~
因为Enum实现了Comparable接口,所以可以对枚举类型排序:
public static void main(String[] args) throws Exception
{
Set<Color> colorSet = new TreeSet<Color>();
colorSet.add(Color.BLUE);
colorSet.add(Color.GREEN);
colorSet.add(Color.RED);
for(Color color : colorSet)
{
System.out.println(color.ordinal() + ":" + color.name() + "("+color.getAlias()+")");
}
}
输出结果:
0:RED(红色)
1:BLUE(蓝色)
2:GREEN(绿色)
我们也可以将一个字符串解析为枚举类型:
public static void main(String[] args) throws Exception
{
Color cRed = Color.valueOf("RED");
Color cBlue = Color.valueOf("BLUE");
System.out.println(cRed.ordinal() + ":" + cRed.name() + "("+cRed.getAlias()+")");
System.out.println(cBlue.ordinal() + ":" + cBlue.name() + "("+cBlue.getAlias()+")");
}
输出结果:
0:RED(红色)
1:BLUE(蓝色)
Java中的枚举的更多相关文章
- 【译】Java中的枚举
前言 译文链接:http://www.programcreek.com/2014/01/java-enum-examples/ Java中的枚举跟其它普通类很像,在其内部包含了一堆预先定义好的对象集合 ...
- Java中的枚举类型详解
枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...
- 扒一扒: Java 中的枚举
目录 1. 枚举的定义 1.1 传统的非枚举方法 1.2 枚举方法 1.3 定义总结 2 枚举的本质 2.1 继承 java.lang.Enum 2.2 final 类型 2.3 枚举常量本身就是该类 ...
- 全面解读Java中的枚举类型enum的使用
这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...
- 用好Java中的枚举真的没有那么简单
1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...
- JAVA中的枚举小结
枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...
- 说说Java中的枚举(一)
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. ...
- Android笔记:java 中的枚举
部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...
- Java中Enum枚举的使用
三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强. 2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例. 3.所有 ...
- Java中的枚举的治理
版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一.为啥用枚举&为啥要对枚举进行治理 1.先来说说为啥用枚举 表中某个字段标识了这条记录的状态,我们往往使用一些code值来标识,例如 ...
随机推荐
- linux下用phpize给PHP动态添加扩展
使用php的常见问题是编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,这里就需要用到phpize了. 如我想增加bcmath扩展的支持,这 ...
- Rhel6-piranha配置文档
系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 192.168.12 ...
- Jmeter—1 安装
1 Jmeter运行需要java环境.首先需要安装JDK. 图标是这样的: 2 下载apache-jmeter包. jmeter官网:http://jmeter.apache.org/ 3 解压 ...
- iOS去除导航栏和tabbar的横线
导航[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetri ...
- Unit Tests
The Three Laws of TDD First Law : you may not write production code until you have written a failing ...
- 【技术无关】GPS转北斗卫星定位 系统调研
前言 陆地交通运输是当前GPS卫星定位系统最大的应用领域,我省自08年实施卫星定位系统建设以来,在车辆监控和调度方面发挥了突出的作用:主要功能包括车辆跟踪.线路规划和导航.信息查询.交通指挥.紧急援助 ...
- C#异步批量下载文件
C#异步批量下载文件 实现原理:采用WebClient进行批量下载任务,简单的模拟迅雷下载效果! 废话不多说,先看掩饰效果: 具体实现步骤如下: 1.新建项目:WinBatchDownload 2.先 ...
- linux 远程管理
启动linuxssh 服务: /etc/init.d/ssh 启动网络服务: service network restart linux远程登录配置过程: 首先在ubuntu下安装openssh-se ...
- 网络数据包收发流程(三):e1000网卡和DMA
一.硬件布局每个网卡(MAC)都有自己的专用DMA Engine,如上图的 TSEC 和 e1000 网卡intel82546.上图中的红色线就是以太网数据流,DMA与DDR打交道需要其他模块的协助, ...
- jquery.cookie() 方法的使用(读取、写入、删除)
一个轻量级的cookie 插件,可以读取.写入.删除 cookie. jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. ...