- 浏览: 87495 次
- 性别:
- 来自: 广州
最新评论
今天给大家介绍一个JDK1.5的新特性:枚举类
先来看看以下的例子:
上面我们就定义了一个枚举类。枚举类里面只会定义一系列的关键字,它的用法如下:
运行结果如下,可以用valueOf(String)的方式来查看是否有某个值,如果该值不存在会抛出一个异常(觉得不是很友好的设计。。。。)
这种类型对于保存一组常量的时候特别有效,即它很好地取代了以前的常量类。以下是没有枚举类之前的做法,这段代码等价于我们定义的枚举类:
大家可能会抱怨,这种枚举类不能存储多个值,即我们可能想要做到一个枚举常量,可以包含多个对应的值来里面,就比如上例,我们对外的变量可能是Monday,Tuesday之类的,实际保存的值可能是1,2,3。。。
其实还是能做到的:
这样,我们的枚举类就比较完整。
不过仍然有美中不足的地方,比如我们不能重写默认的equals方法。所有枚举类的equals方法都是写死的,如果我们想要自定义对比的方法,只能够写一个类似的公有方法。
而且枚举类也不可以继承或者实现接口,所以对于重用方面效果较差。
不过对于保存静态值来说,它还是很好用的,推荐大家尝试一下今后用它来保存常量。
先来看看以下的例子:
package enumdemo; public enum Weekdays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
上面我们就定义了一个枚举类。枚举类里面只会定义一系列的关键字,它的用法如下:
package enudemo; public class WeekdaysDemo { public static void main(String[] args) { System.out.println(Weekdays.Monday); System.out.println(Weekdays.Monday.getClass()); System.out.println(Weekdays.valueOf("Wednesday")); System.out.println(Weekdays.valueOf("Outofdays")); } }
运行结果如下,可以用valueOf(String)的方式来查看是否有某个值,如果该值不存在会抛出一个异常(觉得不是很友好的设计。。。。)
这种类型对于保存一组常量的时候特别有效,即它很好地取代了以前的常量类。以下是没有枚举类之前的做法,这段代码等价于我们定义的枚举类:
package enudemo; public final class WeekdayConstants { public static final String Monday = "Monday"; public static final String Tuesday = "Tuesday"; public static final String Wednesday = "Wednesday"; public static final String Thursday = "Thursday"; public static final String Friday = "Friday"; public static final String Saturday = "Saturday"; public static final String Sunday = "Sunday"; public String valueOf(String str) throws IllegalArgumentException { if(!(WeekdayConstants.Monday.equals(str)|| WeekdayConstants.Tuesday.equals(str)|| WeekdayConstants.Wednesday.equals(str)|| WeekdayConstants.Thursday.equals(str)|| WeekdayConstants.Friday.equals(str)|| WeekdayConstants.Saturday.equals(str)|| WeekdayConstants.Sunday.equals(str))) throw new IllegalArgumentException("Exception throws!"); return str; } }
大家可能会抱怨,这种枚举类不能存储多个值,即我们可能想要做到一个枚举常量,可以包含多个对应的值来里面,就比如上例,我们对外的变量可能是Monday,Tuesday之类的,实际保存的值可能是1,2,3。。。
其实还是能做到的:
package enudemo; public enum Weekdays { Monday(1,"Monday","Mon."), Tuesday(2,"Tuesday","Tue."), Wednesday(3,"Wednesday","Wed."), Thursday(4,"Thursday","Thur."), Friday(5,"Friday","Fri."), Saturday(6,"Saturday","Sat."), Sunday(0,"Sunday","Sun."); //存放星期全称的变量 private String fullname; //存放星期简称的变量 private String shortname; //存放星期索引的变量 private int idx; //Weekdays的构造函数,注意它的访问控制符必须为private private Weekdays(int idx,String fullname,String shortname){ this.idx = idx; this.fullname = fullname; this.shortname = shortname; } /** * 获取星期在一周中的索引值 * @return 星期的索引值, 0 - Sunday, 1 - Monday, .... 6 - Saturday */ public int getIndex(){ return idx; } /** * 获取星期的全称 * @return 星期的全称,如 Sunday, Monday... */ public String getFullName() { return fullname; } /** * 获取星期的简称 * @return 星期的简称,如 Sun., Mon. ... */ public String getShortName() { return shortname; } /** * 当我们打印这种实例时会显示它的全名 */ public String toString() { return fullname; } }
这样,我们的枚举类就比较完整。
不过仍然有美中不足的地方,比如我们不能重写默认的equals方法。所有枚举类的equals方法都是写死的,如果我们想要自定义对比的方法,只能够写一个类似的公有方法。
而且枚举类也不可以继承或者实现接口,所以对于重用方面效果较差。
不过对于保存静态值来说,它还是很好用的,推荐大家尝试一下今后用它来保存常量。
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8616如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2133今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1866最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1561最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:类型强转
2010-01-19 11:56 7581关于类型,我们说了不 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2248昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2230布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1060今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1436自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2059现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1542因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1226很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 3974昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2567今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9514昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1245继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1548上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1508以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...
计算机后端-Java-Java核心基础-第24章 集合01 02. 复习:枚举类.avi
517.515.JAVA基础教程_集合-复习:枚举类(517).rar
主要介绍了Java手动方式创建枚举类,结合实例形式分析了java创建枚举类的方法及相关操作技巧,需要的朋友可以参考下
枚举类可以看作一种标签或是一系列常量的集合,通过用于表示某些特定的有限集合,如星期、月份、状态等。Python的原生类(built-in types)里并没有专门的枚举,但是可以通过很多方法来实现它,如字典、类等。 实例...
Java枚举目录下的所有文件,列出文件名,是一个Java目录直读程序的例子,代码中定义了一个showDirContent方法,该方法实现取得目录内容,用路径实例化一个文件对象,重点:取得目录内所有文件列表,实例化一个...
java简单的 enum枚举类介绍
java高级编程 Enum枚举 包括枚举的例子,问题 及一些文档,是复习的好资源
Java试题-1:交通灯枚举 典型的Java面试题 有关于枚举的应用及交通灯枚举的答案
java枚举结果类、根据状态值获取枚举值 Controller: /** 模块类型枚举 */ model.addAttribute("mType", ModuleTypeEnum.ModuleTypeShow()); ftl: value="${mType.key}:${mType.value}” </#list>
java枚举小例子,简单了解枚举的用法,适合初学者使用。
JAVA:使用枚举
本源码由 springboot 开发,只有2个简单的文件(1是 枚举类单例,2是 controller请求测试类)。 主要测试了枚举类的饿汉式加载机制 / 单例机制。 代码中包含枚举类的基本使用,和完整的请求示例。 主要实现了枚举类...
Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构
java 枚举类总结 enum
简单总结java枚举类型,适合java初学者
Nt系统操作系统用户:枚举、添加、删除谁有获取win2000域用户的代码?
一、枚举类的使用: 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举...
枚举的用法,导入myeclipse看