J2SE 5.0新特性(一)枚举

    技术2024-12-25  15

     

    枚举是J2SE5.0引入的新特性。从表面上看Java的枚举与其它语言中使用的枚举相似,只是一个命名整型常量的列表。而事实并非如此,Java中的枚举被定义为了一个类类型。将枚举引入类以后,枚举的功能被大大扩展,Java中的枚举可以有构造函数、方法和实例变量、甚至可以实现接口。每一个枚举常量都是它的枚举类型的一个对象 ,因此为枚举类定义构造函数,建立每个枚举常量时都要调用该构告函数。

    =========================Writed by Jack.Hao on 2011.01.20========================

    一、枚举基础

    创建枚举类型需要使用新增关键词enum 。

    enum Color{    White,Red,Blue,Black,Yellow;}其中的White,Red这一类标识符被称为枚举常量,它们被隐式声明为Color的公有、静态成员。枚举一定被定义,就可以创建该类型的变量,但却不能使用new关键字实例化一个枚举 。枚举变量的声明和使用方法同操作基本数据类型相似。Color color = Color.Red ;1)枚举常量的判等 :可以使用关系运算符“==”来判断两个枚举常是是否相等    if( color == Color.Red )

    2)枚举常量可用于switch :switch( color ) {    case Red :    case Blue :

        ......}注:case语句中,使用枚举常量时不需要使用枚举类型进行限定,而且那样也是无法通过编译的。因为,case常量的枚举定型被隐式的指定为switch表达式中的枚举类型,所以不需要在case中再一次进行指定。case Color.Red 是不合法的,无法通过编译。

    enum Color{

        White(10),Red(9),Blue(8),Black(7),Yellow(6),Green;    private int value ;    Color( int v ){        value = v ;    }    Color(){        value = -1 ;    }    int getValue(){        return value ;    }}

    class EnumTest{    public static void main( String [] args ){        for( Color c : Color.values ){            System.out.println( c.getPrice() ) ; // 10 9 8 7 6        }    }}

    3)显示一个枚举常量

    System.out.println( Color.Red ) ;   //Red

    =========================Writed by Jack.Hao on 2011.01.20========================二、values()与valueOf()方法

    所有的枚举类型都包括两个方法:values()与valueOf(),形式如下:public static enum-type [] values( ) public static enum-type valueOf( String str )

    values():返回的是枚举常量的数组,valueOf():返回与字符串表示的常量名相关的枚举值

    class TestEnum{    public static void main( String [] args ){        Color color ;        Color [] colors = Color.values() ;        for( Color c : colors ){            System.out.println( c ) ;        }

            color = Color.valueOf( "Red" ) ;        System.out.println( color ) ;

        }}

    枚举有两个限制:1)枚举不能继承自另一个类   2)枚举类不能有子类,枚举类是不可以被扩展的

    =========================Writed by Jack.Hao on 2011.01.20========================

    三、实现自己枚举类

        尽管我们在声明枚举时不能继承自任何类,但是所有的枚举类都会继承自一个类:java.lang.Enum。此类是所有枚举类的父类,但在声明时不需要我们指定。

    Enum定义了三个方法供所有的枚举类使用:

    ordinal():得到枚举常量在常量列表中的位置值,值从0开始

    compareTo():比较同一个枚举类型 的两个常量的顺序值大小

    equals():比较两个枚举常量值是否相等,(相等:0  小于:负值  大于:正值),Enum类重写了Object()定义的equals()方法。尽管equals()可以比较一个枚举常量与其它任何对象,但是只有当这两个对象属于同一个枚举类型且指向同一个常量时,二者才会相等。如果这两个常量来自不同的枚举,仅仅具有相同的顺序equals()是不会返回true 的。

    关系运行符==:两人上枚举常量必须完全相等才会返回true

     

    最新回复(0)