枚举类

J2SE1.5新增了一个enum关键字,用以定义枚举类。从某种程度上来看,enum关键字和class、interface关键字的作用大致相似。

枚举类是一种特殊的类,它一样可以有自己的方法和属性,可以实现一个或者多个接口,也可以定义自己的构造器。一个java源文件中最多只能定义一个public访问权限的枚举类,且该源文件也必须和该枚举类的类名相同。

但枚举类终究不是普通类,它与普通类有如下简单区别:

(1)枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口。

(2)枚举类的构造器只能使用private访问控制符,如果省略了其构造器的访问控制符,则默认使用private修饰:如果强制指定访问控制符,则只能指定private修饰符。

(3)枚举类的所有实例(枚举值)必须在类中显示列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显式添加。

(4)所有枚举类都提供了一个values方法,该方法可以很方便地遍历所有的枚举值。

public enum Gender

{

MALE("男"),FEMALE(“女”);

private String name;

private Gender(String name)

{

this.name=name;

}

public void getName()

{

return this.name;

}

}

    从上面程序可以看出,当我们使用Gender类创建了一个Gender(String name)构造器之后列出枚举值应该采用粗体字所示代码来完成。也就是说,在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象,只是这里无需要使用new关键字,也无需显式调用构造器。
   上面的粗体字代码其实等同于如下两行代码:
public static final Gender MALE=new Gender("男");
public static final Gender FEMALE=new Gender("女");
 

public class TestGender

{

public static void main(String [] args)

{

//通过Enum的valueOf方法来获取指定枚举类的枚举值(实例)

Gender g=Enum.valuof(Gender.class,"FEMALE");

g.setName("女");

System.out.println(g+"代表:"+g.getName());

}

}

   上面加粗的代码使用了Enum的valueOf方法来获取指定的枚举类的枚举值,枚举类与普通类的区别之一是枚举类产生对象的方式和普通类不同,枚举类的实例只能是枚举值,而不是随意地通过new来创建枚举类对象。
    
    从上面介绍中知道,所有的枚举类都继承了java.lang.Enum类,所以枚举类可以直接使用java.lang.Enum类中所包含的方法。java.lang.Enum类中提供了如下几个方法:
    int compareTo(E o): 该方法用于与指定枚举对象比较顺序,同一个枚举实例只能与相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后,则返回正整数;如果该枚举对象位于指定枚举对象之前,则返回负整数,否则返回零。
    String name(): 返回此枚举实例的名称,这个名字就是定义枚举类时列出的所有枚举值之一。于此方法相比,大多数程序员应该优先考虑使用toString()方法,因为toString()方法返回更加用户友好的名称。
    int ordinal(): 返回枚举值在枚举类中的索引值(就是枚举值在枚举声明中的位置,第一个枚举值的索引值为零)。
    String toString(): 返回常量的名称,大致上与name方法相似,但toString()方法更常用。
    public static <T extends Enum<T>>T valueOf(Class<T> enumType, String name): 这是一个静态方法,用于返回指定枚举类中指定名称的枚举值。名称必须与在就枚举类中声明枚举值时所用的标识符完全匹配,不允许使用额外的空白字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值