JAVA自学笔记,枚举

JDK1.5中新增了枚举,枚举是一种数据类型,它是一系列具有名称的常量的集合。比如在数学中所学的集合:A{1,2,3},当使用这个集合时,只能使用集合中的1,2,3这三个元素,不是这三个元素的值就无法使用。Java中的枚举是同样的道理,比如在程序中定义了一个性别枚举,里面只有两个值:男,女。那么在使用该枚举时,只能使用男和女这两个值,其他的任何值都是无法使用的。

使用枚举类型设置常量

以往设置常量,通常将常量放置在接口中,这样在程序中就可以直接使用,并且该常量不能被修改,因为再接口中定义常量时,该常量的修饰符为final与static。
例如:

public interface Constants{
public static final int Constants_A = 1;
public static final int Constants_B = 2;
}

在JDK1.5版本中新增枚举类型后就逐渐取代了这种常量定义方式,因为通过使用枚举类型,可以赋予程序在编译时进行检查的功能。使用枚举类型定义常量的语法如下:

public enum Constants{
Constants_A,
Constants_B,
Constants_C
}

其中,enum是定义枚举类型的关键字,当需要在程序中使用该常量时,可以使用Constants.Constants_A来表示。
下面看一个小例子。
JAVA自学笔记,枚举
JAVA自学笔记,枚举
在上面的例子中,当用户调用doit()方法时,即使编译器不接受在接口欧中定义的常量参数,也不会报错。但调用doit2()方法,任意传递参数,编译器就会报错,因为这个方法只接受枚举类型的常量作为其参数。枚举类型可以再类的内部进行定义,也可以在类的外部定义。如果在类的内部定义,则类似于内部类形式。

深入了解枚举类型

操作枚举类型成员的方法

枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。
用户可以将一个枚举类型看作是一个类,它继承与java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final,public,static修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
由于枚举类型对象继承于java.lang.Enum类,所以该类中的一些操作枚举类型的方法都可以应用到枚举类型中。
JAVA自学笔记,枚举

values

JAVA自学笔记,枚举
JAVA自学笔记,枚举
在本例中,由于values()方法将枚举类型的成员变量以数组的形式返回,所以根据该数组的长度进行循环操作,然后将该数组中的值返回。

valueOf()与compareTo()

枚举类型中静态方法valueOf()可以将普通字符串转换为枚举类型,而compareTo()方法用于比较两个枚举类型成员定义时的顺序。调用compareTo()方法时,如果方法中参数在调用该方法的枚举对象位置之前,则返回正整数,如果两个相互比较的枚举成员位置相同,则返回0;如果方法中参数在调用该方法的枚举对象位置之后,则返回负数。
看例子。
JAVA自学笔记,枚举
JAVA自学笔记,枚举

ordinal

枚举类型中的ordinal方法用于获得某个枚举对象的位置索引值。
JAVA自学笔记,枚举
JAVA自学笔记,枚举

枚举类型中的构造方法

在枚举类型中,可以添加构造方法,但是规定这个构造方法必须为private修饰符或者默认修饰符所修饰。枚举类型定义的构造方法语法如下。
JAVA自学笔记,枚举
从枚举类型构造方法的语法中可以看出,无论是无参构造方法还是有参构造方法,权限修饰都是private。定义一个有参构造方法后,需要对枚举类型成员相应地使用该构造方法,如Constants_A(“我是枚举成员A”)和Constants_D(3)语句,相应地使用了参数为String型和参数为int型的构造方法。然后可以在枚举类型中定义两个成员变量,在构造方法中为这两个成员变量赋值,这样就可以在枚举类型中定义该成员变量的getXXX()方法了。
JAVA自学笔记,枚举
JAVA自学笔记,枚举
在本例中,调用getDescription()和getI()方法,返回在枚举类型定义的构造方法中设置的操作,这里将枚举类型中的构造方法设置为private修饰,以防止实例化一个枚举对象。
我们还可以将getDescription()方法放置在接口中,使枚举类型实现该接口,然后使每个枚举类型实现接口中的方法。
JAVA自学笔记,枚举
JAVA自学笔记,枚举
从上面代码中可以看出,枚举类型可以实现一个或者多个接口,但是他不能继承类。因为编译器会默认将枚举类型继承自java.lang.Enum类,这一过程由编译器完成。
枚举类型中的常量成员必须在其他成员之前定义,否则这个枚举类型不会产生对象。

使用枚举类型的优势

枚举类型声明提供了一种用户友好的变量定义方法,枚举了某种数据类型所有可能出现的值。总结枚举类型,它有一下四种特点:
1,类型安全。
2,紧凑有效的数据定义。
3,可以和程序其他部分完美交互。
4,运行效率高

上一篇:PHP Zend框架 – Zend_Config和全局状态


下一篇:为什么这不适用于PHP?