J2SE 5.0新特性(一)枚举

原创 2011年02月09日 17:40:00

 

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

 

相关文章推荐

J2SE 5.0新特性(一)枚举

枚举是J2SE5.0引入的新特性。从表面上看Java的枚举与其它语言中使用的枚举相似,只是一个命名整型常量的列表。而事实并非如此,Java中的枚举被定义为了一个类类型。将枚举引入类以后,枚举的...

J2SE 5.0新特性(四)自动装箱/拆箱

Java是一种面向对象的编程语言,但它同时也提供了基本数据类型(基本数据类型不是面向对象体系的一部分,也不继承自Object注:1),使用基本数据类型而不是对象,是出于性能方面的考虑:因此即使是最简...

J2SE5.0新特性之使用代理服务器

J2SE1.5也被称为J2SE5.0,在5.0以前的代理服务器设置挺不友好,现在,5.0提供了对通过代理服务器的更加灵活的控制,它可以对http,https,ftp,socks等分别设置,而且还可以设...

J2SE 5.0新特性(二)泛型

Java5.0引入了一个很重要概念就是Generic(泛型),简单的说泛型的引入,可以使们更安全的使用集合类。我们知道集合(List,Set,Map)中可以存储任何类型的数据,而我们在编程中要...

J2SE 5.0新特性(五)可变长参数

可变长参数是J2SE5新入的一个特性,故名思义就是可以创建数目可变的参数方法,简称varargs方法。 需要将数目不定的参数传递给一个方法的情况很常见,当然在这个新特性被引入之前...

J2SE 5.0新特性(六)静态引入

从J2SE5开始,import不仅可以导入包或者类,还可以导入静态方法和静态域。 我们在导入类时使用import ,而静态导入则使用import static 作为关键字。 静态导入的好处是我们在...

J2SE 5.0新特性精解

  • 2008年10月10日 17:30
  • 953KB
  • 下载

J2SE(TM) 5.0专题 之 语言特性 (完整版)

[版权声明] 作者保留本文的版权。如需转载,请保持文章完整,注明出处,并保留此声明;如需用于商业目的,须作者本人书面许可。作者的联系E-mail: gaoyuxiang@gmail.com  ...

体验J2SE 1.5新特性之增强For循环

1.5提供了另一种形式的for循环。借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象。本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类,并解释和...
  • ergouge
  • ergouge
  • 2012年05月05日 00:02
  • 342

J2SE5新特性学习

静态导入java.lang Math 类很多static方法.  如下代码:import java.lang.Math;  //一般导入....System.out.println(Math.max(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2SE 5.0新特性(一)枚举
举报原因:
原因补充:

(最多只允许输入30个字)