Java中枚举enum的基本用法

因为之前看电视底层的一些接口很多地方都用到了枚举,所以现在学学,总结一下枚举,首先我们先看一下一个例子

1
2
3
public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}

事实上枚举enum声明定义的类型就是一个类,所以我们统称为枚举类,这些类都是类库中Enum类的子类(java.lang.Enum)。它们会继承Enum中的方法,通常这些方法能帮助我们更好地操作枚举类。上述Color就是一个枚举类,而且是一个不可被继承的final类。其枚举值(RED,BLUE…)都是Color类型的类静态常量,可以通过下面的方式来得到Color枚举类的一个实例

1
Color c=Color.RED;

注意:这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值一般都是大写,既然枚举类也是类,当然也会有构造器,方法和数据域,但是,枚举类的构造器和普通类的构造器有很大的不同:

##枚举构造器的不同

  • 构造器只是在构造枚举值的时候被调用
  • 构造器只能是私有的private,不允许有public构造器
    这样可以保证外部代码无法新构造枚举类实例,因为我们知道枚举值是public static final的常量而已。但枚举值的方法和数据域允许外部访问。
  • 枚举类可以在switch中使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Color color=Color.RED;
    switch(color){
    case RED:
    System.out.println("it's red");break;
    case BLUE:
    System.out.println("it's blue");break;
    case BLACK:
    System.out.println("it's blue");break;
    }

枚举类常用的方法

ordinal()方法:

返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。

1
2
Color.RED.ordinal();  //返回结果:0
Color.BLUE.ordinal();  //返回结果:1

compareTo()方法:

Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常(具体可见源代码)

1
Color.RED.compareTo(Color.BLUE);  //返回结果 -1

values()方法:

静态方法,返回一个包含全部枚举值的数组。

1
2
3
4
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,

toString()方法:

返回枚举常量的名称。

1
2
Color c=Color.RED;
System.out.println(c.toString());//返回结果: RED

valueOf()方法:

这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。

1
Color.valueOf("BLUE");   //返回结果: Color.BLUE

equals()方法:

比较两个枚举类对象的引用。