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

 

Java使用eclipse新建枚举报出, 项目“xxxxx”不是符合 J2SE 5.0 的项目。的解决办法

在eclipse新建的枚举报出 项目“XXXX”不是符合 J2SE 5.0 的项目。这样的 错误,结果可能是编译器的版本的问题,也可能是你JDK版本的 问题。解决这个问题你可以按照如下的步骤来实现: ...
  • he_min
  • he_min
  • 2015年09月02日 20:44
  • 1273

python3学习笔记:枚举enum

1. 枚举的定义首先,定义枚举要导入enum模块。 枚举定义用class关键字,继承Enum类。 用于定义枚举的class和定义类的class是有区别【下一篇博文继续分享】。  示例代码:from e...
  • xionghuixionghui
  • xionghuixionghui
  • 2017年03月26日 16:33
  • 2216

枚举特性标记和基本处理类及应用

枚举特性标记和基本处理类及应用
  • Joyhen
  • Joyhen
  • 2014年09月26日 10:58
  • 1990

J2SE 5.0新特性(一)枚举

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

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

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

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

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

J2SE 5.0新特性(二)泛型

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

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

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

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

从J2SE5开始,import不仅可以导入包或者类,还可以导入静态方法和静态域。 我们在导入类时使用import ,而静态导入则使用import static 作为关键字。 静态导入的好处是我们在...
  • ITMagic_Jack
  • ITMagic_Jack
  • 2011年02月10日 17:06
  • 1338

J2SE 5.0新特性精解

  • 2008年10月10日 17:30
  • 953KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2SE 5.0新特性(一)枚举
举报原因:
原因补充:

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