欢迎来到天天文库
浏览记录
ID:37861120
大小:57.50 KB
页数:8页
时间:2019-06-01
《java中的枚举20111206》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java中的枚举Tiger(JDK版本号)中的一个重要新特性是枚举构造,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。Tiger专家、developerWorks的多产作者。下面将解释枚举的定义,介绍如何在应用程序中运用枚举,以及它为什么能够让您抛弃所有旧的publicstaticfinal代码。您已经知道,Java代码的两个基本的构造块是类和接口。现在Tiger又引入了枚举,一般简称它为enum。这个新类型允许您表示特定的数据点,这些数据点只接受分配时预先定义的值集合。 枚举是允许用常量来表示特定
2、的数据片断,而且全部都以类型安全的形式来表示,它使用“enum”关键字来定义。 我们先来写一个简单的枚举类型的定义:查看复制到剪切板打印1.public enum WeekDay{ 2.MONDAY, TUESDAY, WENSDAY, THURSDAY, FRIDAY; //最后这个“;”可写可不写。 3.} publicenumWeekDay{MONDAY,TUESDAY,WENSDAY,THURSDAY,FRIDAY;//最后这个“;”可写可不写。} 这和类、接口的定义很相像嘛!Tiger中的枚举类型就是一种使用
3、特殊语法“enum”定义的类。所有的枚举类型是java.lang.Enum的子类。这是Tiger中新引入的一个类,它本身并不是枚举类型,但它定义了所有枚举类型所共有的行为,具体的行为属性可以查看JDK文档。注意:虽然所有的枚举类型都继承自java.lang.Enum,但是你不能绕过关键字“enum”而使用直接继承Enum的方式来定义枚举类型。编译器会提示错误来阻止你这么做。 WeekDay中定义的五个枚举常量之间使用“,”分割开来。这些常量默认都是“publicstaticfinal”的,所以你就不必再为它们加上“publicst
4、aticfinal”修饰(编译器会提示出错),这也是为什么枚举常量采用大写字母来命名的原因。而且每一个常量都是枚举类型WeekDay的一个实例。你可以通过类似“WeekDay.MONDAY”这种格式来获取到WeekDay中定义的枚举常量,也可以采用类似“WeekDayoneDay=WeekDay.MONDAY”的方式为枚举类型变量赋值(你不能给枚举类型变量分配除了枚举常量和null以外的值,编译器会提示出错)。 作为枚举类型实例的枚举常量是如何初始化的呢?其实答案很简单,这些枚举常量都是通过Enum中定义的构造函数进行初始化的。1
5、.// java.lang.Enum中定义的构造函数, 2.// 两个参数分别是定义的枚举常量名称以及它所在的次序。 3.protected Enum(String name, int ordinal) { 4. 5. this.name = name; 6. 7. this.ordinal = ordinal; 1. 2.} //java.lang.Enum中定义的构造函数,//两个参数分别是定义的枚举常量名称以及它所在的次序。protectedEnum(Stringname,intordinal){this.n
6、ame=name;this.ordinal=ordinal;} 在初始化的过程中,枚举常量的次序是按照声明的顺序安排的。第一个枚举常量的次序是0,依此累加。 枚举类型除了拥有Enum提供的方法以外,还存在着两个隐藏着的与具体枚举类型相关的静态方法——values()和valueOf(Stringarg0)。方法values()可以获得包含所有枚举常量的数组;方法valueOf是java.lang.Enum中方法valueOf的简化版本,你可以通过它,根据传递的名称来得到当前枚举类型中匹配的枚举常量。当然,熟练的程序员可以用静
7、态常量实现这项功能,如清单1所示:清单1.publicstaticfinal的常量publicclassOldGrade{ publicstaticfinalintA=1; publicstaticfinalintB=2; publicstaticfinalintC=3; publicstaticfinalintD=4; publicstaticfinalintF=5; publicstaticfinalintINCOMPLETE=6;} 然后您就可以让类接受像OldGrade.B这样的常量,但是在这样做的时候,请记住这类常量是Java
8、中int类型的常量,这意味着该方法可以接受任何int类型的值,即使它和OldGrade中定义的所有级别都不对应。因此,您需要检测上界和下界,在出现无效值的时候,可能还要包含一个IllegalArgument
此文档下载收益归作者所有