枚举通过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中的枚举的更多相关文章

  1. 【译】Java中的枚举

    前言 译文链接:http://www.programcreek.com/2014/01/java-enum-examples/ Java中的枚举跟其它普通类很像,在其内部包含了一堆预先定义好的对象集合 ...

  2. Java中的枚举类型详解

    枚举类型介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义 ...

  3. 扒一扒: Java 中的枚举

    目录 1. 枚举的定义 1.1 传统的非枚举方法 1.2 枚举方法 1.3 定义总结 2 枚举的本质 2.1 继承 java.lang.Enum 2.2 final 类型 2.3 枚举常量本身就是该类 ...

  4. 全面解读Java中的枚举类型enum的使用

    这篇文章主要介绍了Java中的枚举类型enum的使用,开始之前先讲解了枚举的用处,然后还举了枚举在操作数据库时的实例,需要的朋友可以参考下 关于枚举 大多数地方写的枚举都是给一个枚举然后例子就开始sw ...

  5. 用好Java中的枚举真的没有那么简单

    1.概览 在本文中,我们将看到什么是 Java 枚举,它们解决了哪些问题以及如何在实践中使用 Java 枚举实现一些设计模式. enum关键字在 java5 中引入,表示一种特殊类型的类,其总是继承j ...

  6. JAVA中的枚举小结

    枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...

  7. 说说Java中的枚举(一)

    在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的.例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”. ...

  8. Android笔记:java 中的枚举

    部分数据使用枚举比较方便,java中的enmu不如c#中使用方便 记录备忘 以c#中的代码为例 public enum PlayState { /// <summary> /// 关闭 / ...

  9. Java中Enum枚举的使用

    三种不同的用法 注意项: 1.在switch中使用枚举能使代码的可读性更强.   2.如果要自定义方法,那么必须在enum实例序列的最后添加分号.而且Java要求必须先定义enum实例.   3.所有 ...

  10. Java中的枚举的治理

    版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一.为啥用枚举&为啥要对枚举进行治理 1.先来说说为啥用枚举 表中某个字段标识了这条记录的状态,我们往往使用一些code值来标识,例如 ...

随机推荐

  1. document的createDocumentFragment()方法

    在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...

  2. Linux系统真正的优势以及学习方法

    作为一名Linux爱好者,在Linux的世界中也算是半个老司机了,从桌面玩到服务器.从ubuntu到centos.从计算机到路由器,各种Linux的花俏玩法都略有体验.作者并非职业Linux选手,我仅 ...

  3. 图表控件== 百度 echarts的入门学习

    花了3天的时间 去学习跟试用之前两款的图表控件 hightcharts(商业,人性化,新手非常方便试用,图表少了点) 跟chartjs==>搭配vue更好 控件,整体而言都还可以. http:/ ...

  4. 计算第k个质因数只能为3,5,7的数

    英文描述:Design an algorithm to find the kth number such that the only prime factors are 3, 5, and 7 思路: ...

  5. ubuntu13.04 nfs配置

    开发板和主机之间共享文件,常常需要配置nfs服务: 服务器端安装:root#:apt-get install nfs-common root#:apt-get install nfs-kernel-s ...

  6. PostgreSQL的9.4已经发布(译)

    http://www.postgresql.org/about/news/1557/ 2014年12月18日,PostgreSQL全球开发小组发布PostgreSQL9.4,PostgresQL是世界 ...

  7. Python的平凡之路(10)

    异步IO 数据库 队列 缓存 1.Gevent协程 定义:用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下 ...

  8. Different types of keystore in Java Overview

    Different types of keystore in Java JKS DKS JCEKS PKCS12 PKCS11 http://www.pixelstech.net/article/14 ...

  9. [SQL Basics] Indexes

    An index is used to speed up searching in the database. By default, when you create this table, your ...

  10. 深入了解Hibernate的缓存使用

    Hibernate缓存 缓存是计算机领域的概念,它介于应用程序和永久性数据存储源(如在硬盘上的文件或者数据库)之间,其作用是降低应用程序 直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中 ...