您的位置:首页 > 编程语言 > Java开发

J2SE 5.0新特性(一)枚举

2011-02-09 17:40 344 查看
 

枚举是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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息