因为之前看电视底层的一些接口很多地方都用到了枚举,所以现在学学,总结一下枚举,首先我们先看一下一个例子1
2
3public enum Color{
RED,BLUE,BLACK,YELLOW,GREEN
}
事实上枚举enum声明定义的类型就是一个类,所以我们统称为枚举类,这些类都是类库中Enum类的子类(java.lang.Enum1
Color c=Color.RED;
注意:这些枚举值都是public static final
的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值一般都是大写,既然枚举类也是类,当然也会有构造器,方法和数据域,但是,枚举类的构造器和普通类的构造器有很大的不同:
##枚举构造器的不同
- 构造器只是在构造枚举值的时候被调用
- 构造器只能是私有的private,不允许有public构造器
这样可以保证外部代码无法新构造枚举类实例,因为我们知道枚举值是public static final的常量而已。但枚举值的方法和数据域允许外部访问。 - 枚举类可以在switch中使用
1
2
3
4
5
6
7
8
9Color 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
2Color.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
4Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回结果:RED,BLUE,BLACK YELLOW,GREEN,
toString()方法:
返回枚举常量的名称。1
2Color c=Color.RED;
System.out.println(c.toString());//返回结果: RED
valueOf()方法:
这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。1
Color.valueOf("BLUE"); //返回结果: Color.BLUE
equals()方法:
比较两个枚举类对象的引用。