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值来标识,例如 ...
随机推荐
- css盒子模型 padding
注意: 行内元素的内边距的top和bottom是不起作用的,想让他起作用要让他变成块元素加:display:bloock 注意: 如果元素设置了背景,那么背景会填充到内容区+内边距区 利用paddin ...
- Java设计模式系列2--工厂方法模式(Factory Method)
2014-02-26 09:56:45 声明:本文不仅是本人自己的成果,有些东西取自网上各位大神的思想,虽不能一一列出,但在此一并感谢! 工厂方法模式分为三种: 1. 普通工厂模式 建立一个工厂类,对 ...
- 删除ubuntu旧版本内核
方法一: 1.查看系统下可使用的内核有哪些 dpkg --get-selectiongs|grep linux-image liming@CM:~$ dpkg --get-selections|gre ...
- 单例模式(Singleton Pattern)
动机: 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例? 这应该是类设 ...
- Wince 6.0 窗口最大化显示
在InitDialog用如下代码实现: CRect m_FullScreenRect; //全屏区域 CRect WindowRect; GetWindowRect(&Window ...
- C# base64图片数据传送加号(+)变空格问题
今天遇到一个问题,将图片的base64数据转发,客户收到base64数据后生成图片失真. 通过日志监控,对比客户收到的数据和我发出的数据,最终发现客户base64数据中原本应该显示为加号(" ...
- iOS 模拟器上录制Demo视频
在App审核中会让用户上传一段简易的视频,那么如何制作改视频呢? 今天无意中在Cocochina 中看到 说利用QuickTime来制作,而QuickTime是操作系统自带的. 哦 My,God ! ...
- golang flag包简单例子
package main import ( "flag" "fmt" ) var workers int; func main() { flag.IntVar( ...
- Oracle的内存结构
备注:本图片截图自“炼数成金” Oracle的体系结构分为内存结构.进程,磁盘文件. 内存结构分为SGA, PGA.SGA是系统全局区,是所有的用户共享区,PGA是某个用户的私有区. SGA分为sha ...
- hasLayout与BFC的触发条件
hasLayout与BFC是分别在IE和其他浏览器上的两个作用很相近的概念,在很多时候,我们需要触发它们去实现有些效果.例如清除浮动时需要触发hasLayout与BFC:很多自适应的两栏和三栏布局(两 ...