(10) - 枚举 (图)

发布时间:2017-1-20 15:48:35 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"(10) - 枚举 (图)",主要涉及到(10) - 枚举 (图)方面的内容,对于(10) - 枚举 (图)感兴趣的同学可以参考一下。

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- 1、 枚举概述 是java在JDK1.5后新加入的特性,是描述常量值的一个“集合”,在java中用一个特殊的类型enum来封装,这个特殊的类定义的是固定的值对象,其声明的值不希望再被定义,类似于单例模式。如有这样一个需求:想要定义一个Color类,只有Red、Green、Blue这3个值,其他任何值都是非法的,虽然以前能构造出这样的代码,但是要做很多工作,且存在安全性问题,但有了枚举就简单了。   2、 普通类模拟枚举功能 模拟枚举的一个普通类,需要有以下特点: (1)   私有化构造方法。 (2)   每一个元素都是一个实例对象。 (3)   每个对象都用public final static修饰。 (4)   可以定义公有方法和抽象方法。 //普通类模拟枚举 public abstract class EnumDemo { private EnumDemo() {//私有化了构造函数,外部不可创建对象了 } //可以定义抽象方法 public abstract EnumDemo fun(); //SUN即为一个值对象,用public final static修饰 public final static EnumDemo SUN = new EnumDemo() {//在构建对象时复写抽象方法 public EnumDemo fun() { return null; } }; //不同对象都要复写 public final static EnumDemo MON = new EnumDemo() { public EnumDemo fun() { return null; } }; } 3、 枚举的应用 (1)   枚举的基本格式 public enum Color { //枚举对象,被要求必须定义在第一行 RED,GREEN,BLUE } (2)   枚举的一些常用方法 枚举实际也是继承Object,所以Object的方法,枚举也是含有的。其实枚举就是一个特殊的类,它独有的一些方法为: //比较此枚举与指定对象的顺序 int compareTo(E e) //返回此枚举常量的名称,在其枚举声明中对其进行声明 String name() //返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零) int ordinal() //静态方法valueOf,如,返回RED值对象的字串值 枚举名.valueOf(“RED”).toString() //静态方法values,返回一个数组,保存所有枚举值 枚举名.values().length//个数 (3)   枚举中可定义成员 枚举就是一个特殊类,所以他能 定义普通方法和抽象方法,定义构造函数,不过是私用的,能实现接口等。 看下面的一个综合例子: interface Inter { public String getName(); } //实现接口 enum MyEnum implements Inter { //枚举值在第一行,先用带参的构造函数 NAME_A("aaaa"){ publicvoid fun(){//实现抽象方法 } },//注意这里的逗号 NAME_B("bbbb") { //实现抽象方法 public void fun(){} };//分号 private String name;//变量 MyEnum(String name)//定义的带参构造函数 { this.name = name; } @Override public String getName()//复写接口方法 { return name; } public void fun2() { //普通方法 } public abstract void fun();//抽象方法 } public class EnumTest { public static void main(String[] args) { //调用,由于枚举创建器值就固定,就只能取值了 System.out.println(MyEnum.NAME_A);//结果为NAME_A System.out.println(MyEnum.NAME_B.getName());//结果为bbbb } } 4、 枚举的一些特点 (1)   枚举值必须定义在第一行 (2)   构造函数必须私有 (3)   因为ENUM类的定义时实现了Comparable接口,所以枚举的内容可以进行排序。 (4)   Enum类实现了Serializable接口,枚举可序列化 (5)   不可再继承,enum默认已经继承了Enum,Java只能单继承,所以不能在继承了,但可再实现接口。 不能派生,枚举构造函数私有,其实是种单例模式,子类发现不了父类的构造函数,派生不了,如果拿一个枚举类去反编译,发现它是一个被final修饰的类,final修饰的类不能派生。 ---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

上一篇:单链表逆序详解
下一篇:IOS NSUserDefaults 小技巧

相关文章

相关评论