(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培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值