ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:21.21KB ,
资源ID:2788113      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2788113.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(JAVA枚举.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

JAVA枚举.docx

1、JAVA枚举一、使用简单程序完成枚举的功能例:使用简单类完成枚举操作class Colorpublic static final Color RED = new Color(红色) ;/定义第一个对象public static final Color GREEN = new Color(绿色) ;/定义第二个对象public static final Color BLUE = new Color(蓝色) ;/定义第三个对象private String name ;private Color(String name) /构造方法私有化,同时设置颜色的名称 this.setName(name) ;

2、 /为颜色的名字赋值public String getName() /取得颜色名称 return this.name;public void setName(String name) /设置颜色名称 this.name = name;public static Color getInstance(int i) /得到 一个颜色,只能从固定的几个颜色中取得 switch (i) case 1 : /返回红色对象 return RED ; case 2 : /返回绿色对象 return GREEN ; case 3 : /返回蓝色对象 return BLUE ; default: /错误的值 re

3、turn null ; public class ColorDemo public static void main(String args) Color c1 = Color.RED ; /取得红色 System.out.println(c1.getName();/输出名字 Color c2 = Color.getInstance(3) ;/根据编号取得名字 System.out.println(c2.getName();/输出名字输出:红色蓝色程序将Color类中的构造方法私有,之后在类中准备了若干个实例化对象,以后如果要取得Color类的实例,则只能从RED、GREEN、BLUE3个对象

4、中取得,这样就有效地限制了对象 的取得范围。以上使用的Color对象指定的范围,是通过一个个常量对每个对象进行编号的。也就是说,一个个的对象就相当于用常量表示了,所以,按照这个思路也可以直接使用一个接口规定出一组常量的范围。例:使用接口表示一组范围。public interface Colorpublic static final int RED = 1 ; /表示红色public static final int GREEN = 2 ; /表示绿色public static final int BLUE = 3 ; /表示蓝色以上表示出的各个颜色是通过接口指定好的常量范围,与之前相比更加简单

5、。但是这样做也会存在另外一个问题,如果现在使用如下的代码:public class ColorDemopublic static void main(String args) System.out.println(Color.RED + Color.GREEN) ; /颜色相加输出:3两个颜色的常量相加后形成“3”,这样的结果看起来会令人很困惑,操作很不明确。二、定义一个枚举类型例:定义一个Color的枚举类型public enum Color /定义枚举类型RED,GREEN,BLUE ; /定义枚举的3个类型以上的Color定义出来的枚举类型,其中包含RED,GREEN,BLUE3个数据。

6、可以使用“枚举.variable”的形式取出枚举中的指定内容。例:取出一个枚举的内容public class GetEnumContent public static void main(String args) Color c = Color.BLUE ; /取出蓝色 System.out.println(c); /输出信息输出:BLUE枚举类型的数据也可以使用“枚举.values()”的形式,将全部的枚举类型变为对象数组的形式,之后直接使用foreach进行输出。例:使用foreach输出枚举内容public class PrintDemo public static void main(

7、String args) for(Color c : Color.values() /枚举.values()表示得到 全部枚举的内容 System.out.println(c); 输出:REDGREENBLUE枚举中的每个 类型也可以使用switch进行判断,但在switch语句中使用枚举类型时,一定不能在每一个枚举类型值的前面加上枚举类型的类名(如Color.BlUE),否则编译器将会报错。例:使用switch进行判断public class SwitchPrintDemo public static void main(String args) for(Color c : Color.va

8、lues() /枚举.values()表示得到 全部枚举的内容 print(c); public static void print(Color color) switch(color) /判断每个颜色 case RED: /直接判断枚举内容 System.out.println(红颜色); break ; case GREEN: /直接判断枚举内容 System.out.println(绿颜色); break ; case BLUE: /直接判断枚举内容 System.out.println(蓝颜色); break ; default : /未知内容 System.out.println(未

9、知颜色); break ; 输出:红颜色绿颜色蓝颜色上面的Color.values()方法表示取得枚举中的全部内容,返回的是一个对象数组,这是枚举本身支持的一个方法,除了这个方法之外到底还有哪些方法可以供开发者使用呢?三、Enum使用Enum关键字定义一个枚举,实际上此关键字表示的是java.lang.Enum类型,即使用enum声明的枚举类型就相当于定义一个类,而此类则默认继承java.lang.Enum类。java.lang.Enum类的定义如下:public abstract class EnumE extends Enumextends Objectimplements Compara

10、ble, Serializable从Enum类的定义中可以清楚地发现,此类实现了Comparable和Serializable两个接口,证明枚举类型可以使用比较器和序列化操作。 枚举类的主要操作方法protected Enum(String name,int ordinal)构造 接收枚举的名称和枚举的常量创建枚举对象protected final Object clone()throws CloneNotSupportedException克隆枚举对象public final int compareTo(E o)对象比较public final boolean equals(Object o

11、ther)比较两个枚举对象public final int hashCode()返回枚举常量的哈希码public final String name()返回此枚举的名称public final int ordinal()返回枚举常量的序数public static T extends EnumT valueOf(ClassenumType,String name)返回带指定名称的指定枚举类型的枚举常量取得枚举的信息在枚举建立完成之后,实际上都会调用枚举类中的构造方法,为其赋值。在Enum类 的构造方法中的第一个参数name就是定义的枚举的名称,第二个参数ordinal则会从0开始依次进行编号。

12、之后 可以使用Enum类中的name()和ordinal()方法取得名称和编号。例:验证name()和ordinal()方法enum Color /定义枚举类型RED,GREEN,BLUE ; /定义枚举的3个类型public class GetEnumInfo public static void main(String args) for(Color c :Color.values() ) /枚举.values()表示得到 全部枚举的内容 System.out.println(c.ordinal() + - + c.name(); 输出:0 - RED1 - GREEN2 - BLUE从结

13、果中发现Enum类自动为枚举中的每个元素进行编号,而且下标从0开始。四、为每一个枚举对象属性赋值1、通过构造方法为属性赋值每个枚举类中都 有其指定好的若干对象,当然,每一个枚举对象中也可以包含多个属性。而这些属性 也可以通过构造方法为其赋值。例:通过构造方法为枚举属性赋值enum ColorRED(红色),GREEN(绿色),BLUE(蓝色);private Color(String name) this.setName(name) ;private String name ;public String getName() return name ;public void setName(St

14、ring name) this.name = name ;public class ConstructorEnum public static void main(String args) for(Color c:Color.values() System.out.println(c.ordinal() + - + c.name() + ( + c.getName() + ); 输出:0 - RED(红色)1 - GREEN(绿色)2 - BLUE(蓝色)以上程序代码在定义的Color枚举类中设置了一个name属性,并且通过构造方法设置name属性的内容。因为Color中已经明确地写出有一个参

15、数的构造方法,所以在声明枚举内容时就必须调用这个构造方法,这样在定义枚举内容的就必须使用如下语句:RED(红色),GREEN(绿色),BLUE(蓝色);2、通过setter方法为属性赋值以上是通过构造方法的方式为属性赋值的,当然也可以通过调用setter()的方式为指定的属性赋值。但是这样一来就必须明确每一个枚举类的对象,如果操作的对象是RED,则名字应该为“红色”;如果操作的是GREEN,则名字应该为“绿色”等。例:使用setName()设置内容enum ColorRED,GREEN,BLUE; private String name ;public String getName() ret

16、urn name ;public void setName(String name) switch(this) /判断是否是紅色 case RED: if(红色.equals(name) this.name = name ; else System.out.println(设置内容错误。); break ; case GREEN: if(绿色.equals(name) this.name = name ; else System.out.println(设置内容错误。); break ; case BLUE: if(蓝色.equals(name) this.name = name ; else

17、 System.out.println(设置内容错误。); break ; public class SetEnum public static void main(String args) Color c = Color.BLUE ; c.setName(兰色) ; /设置一个错误的名字 c.setName(蓝色) ; /设置一个正确的名字 System.out.println(c.getName();输出:设置内容错误。蓝色以上代码中首先通过枚举取得了一个对象。之后开始为其设置内容,一开始设置了一个不符合要求的内容,所以会出现“设置内容错误”的提示;而如果设置的内容正确,则可以直接将其赋值

18、给name属性。如果不想通过“枚举类.对象”的形式取得每一个枚举类对象,也可以使用Enum类定义的“枚举类.valueof()”方法的形式进行调用。例:使用valueof()方法找到一个枚举对象。public class ValueOfEnum public static void main(String args) Color c = Enum.valueOf(Color.class, BLUE) ; c.setName(兰色) ; /设置一个错误的名字 c.setName(蓝色) ; /设置一个正确的名字 System.out.println(c.getName();输出:设置内容错误。蓝

19、色以上操作代码使用valueof(),但是在设置第一个参数时使用了“枚举.class”的形式,此为Java的反射机制。五、使用比较器在Enum类的定义中已经实现好了Comparable接口,所以枚举类的内容本身是可以进行排序的,下面通过TreeSet演示枚举的排序操作。在类集部分曾经介绍过TreeSet可以直接进行排序,排序的规则是通过Comparable接口完成的。例:验证枚举比较器import java.util.Iterator;import java.util.Set;import java.util.TreeSet;enum ColorRED,GREEN,BLUE; public c

20、lass ComparableEnum public static void main(String args) Set t = new TreeSet() ; t.add(Color.GREEN) ; t.add(Color.BLUE) ; t.add(Color.RED) ; Iterator iter = t.iterator() ; while(iter.hasNext() System.out.print(iter.next() + 、); 输出:RED、GREEN、BLUE、以上代码中数据加入的顺序是GREEN、BLUE、RED,但是输出之后的顺序是RED、GREEN、BLUE证明

21、已经被排序了,是使用Enum类中的ordinal属性排序的。六、类集对枚举的支持EnumMap、EnumSet1、EnumMapEnumMap是Map接口的子类,所以本身还是以Map的形式进行操作,即key-value。如果要使用EnumMap,则首先要创建EnumMap的对象,在创建此对象时必须指定要操作的枚举类型,构造方法如下:public EnumMap(Class keyType)例:验证EnumMapimport java.util.EnumMap;import java.util.Map;enum ColorRED,GREEN,BLUE; public class Comparab

22、leEnum public static void main(String args) Map desc = null ; desc = new EnumMap(Color.class) ; desc.put(Color.RED, 红色) ; desc.put(Color.GREEN, 绿色) ; desc.put(Color.BLUE, 蓝色) ; System.out.println(= 输出全部内容 =); for(Color c:Color.values() /取得全部的枚举 System.out.println(c.name() + - + desc.get(c); System.o

23、ut.println(= 输出全部键值 =); for(Color c:desc.keySet() /取得全部的key System.out.print(c.name() + 、 ); System.out.println(); System.out.println(= 输出全部的内容 =); for(String s:desc.values() /取得全部的value System.out.print(s + 、 ); 输出:= 输出全部内容 =RED-红色GREEN-绿色BLUE-蓝色= 输出全部键值 =RED、GREEN、BLUE、= 输出全部的内容 =红色、绿色、蓝色、2、EnumSe

24、tEnumSet是Set接口的子类,所以里面的内容是无法重复的。使用EnumSet时不能直接使用关键字new为其进行实例化,所以在此类中提供了很多的静态方法,如表:public static E extends Enum EnumSetallOf(ClasselementType) 将枚举中的全部内容设置到EnumSet中public static E extends Enum EnumSetof(E first,E. rest) 创建一个包含枚举指定内容的EnumSet对象public static E extends Enum EnumSetcopyOf(Collectionc) 创建一个

25、从指定Collection中指定的EnumSet对象public static E extends Enum EnumSetComplementOf(EnumSets)创建一个其元素类型与指定枚举set相同的枚举set,最初包含指定集合中所不包含的此类型的所有元素public static E extends Enum EnumSetnoneOf(ClasselementType) 创建一个可以接收指定类的空集合例:验证EnumSet将全部的集合设置到EnumSet集合中import java.util.EnumSet;enum ColorRED,GREEN,BLUE; public clas

26、s ComparableEnum public static void main(String args) EnumSet es = null ; /声明一个EnumSet对象 System.out.println(= EnumSet.allOf(Color.Class) =); es = EnumSet.allOf(Color.class) ; /将枚举的全部类型设置到EnumSet对象中 print(es) ; public static void print(EnumSet temp) for(Color c:temp) System.out.print(c + 、); System.o

27、ut.println();输出:= EnumSet.allOf(Color.Class) =RED、GREEN、BLUE、以上程序使用EnumSet提供的static方法allOf(),将一个枚举中的全部内容设置到EnumSet集合中。例:验证EnumSet只设置一个枚举的类型到集合中import java.util.EnumSet;enum ColorRED,GREEN,BLUE; public class ComparableEnum public static void main(String args) EnumSet es = null ; /声明一个EnumSet对象 System.out.println(= EnumSet.al

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2