2 常用用法
2.1 常量
在JDK1.5 之前,我们定义常量都是: public static fianl… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
2.2 switch
JDK1.6之前的switch语句只支持int、char、enum类型,使用枚举,能让我们的代码可读性更强。
public class TestEnum { public void changeColor() { Color color = Color.RED; System.out.println("原色:" + color); switch(color){ case RED: color = Color.GREEN; System.out.println("变色:" + color); break; case GREEN: color = Color.BLUE; System.out.println("变色:" + color); break; case BLUE: color = Color.BLACK; System.out.println("变色:" + color); break; case BLACK: color = Color.PINK; System.out.println("变色:" + color); break; case PINK: color = Color.WHITE; System.out.println("变色:" + color); break; case WHITE: color = Color.RED; System.out.println("变色:" + color); break; } } public static void main(String[] args){ TestEnum testEnum = new TestEnum(); testEnum.changeColor(); } }
2.3 实现接口
public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 接口方法 @Override public String getInfo() { return this.name; } // 接口方法 @Override public void print() { System.out.println(this.index + ":" + this.name); } }
枚举集合
- EnumSet保证集合中的元素不重复
- EnumMap中的 key是enum类型,而value则可以是任意类型
- 三、综合实例
最简单的使用
最简单的枚举类
public enum Weekday { SUN,MON,TUS,WED,THU,FRI,SAT }
如何使用它呢?
先来看看它有哪些方法:
这是Weekday可以调用的方法和参数。发现它有两个方法:values()和valueOf()。还有我们刚刚定义的七个变量
这些事枚举变量的方法。我们接下来会演示几个比较重要的
这段代码,我们演示了几个常用的方法和功能:
Weekday.valueOf() 方法:
它的作用是传来一个字符串,然后将它转变为对应的枚举变量。前提是你传的字符串和定义枚举变量的字符串一样,区分大小写。如果你传了一个不存在的字符串,那么会抛出异常。
Weekday.values()方法。
这个方法会返回包括所有枚举变量的数组。在该例中,返回的就是包含了七个星期的Weekday[]。可以方便的用来做循环。
枚举变量的toString()方法。
该方法直接返回枚举定义枚举变量的字符串,比如MON就返回【”MON”】。
枚举变量的.ordinal()方法。
默认情况下,枚举类会给所有的枚举变量一个默认的次序,该次序从0开始,类似于数组的下标。而.ordinal()方法就是获取这个次序(或者说下标)
枚举变量的compareTo()方法。
该方法用来比较两个枚举变量的”大小”,实际上比较的是两个枚举变量的次序,返回两个次序相减后的结果,如果为负数,就证明变量1”小于”变量2 (变量1.compareTo(变量2),返回【变量1.ordinal() - 变量2.ordinal()】)
这是compareTo的源码,会先判断是不是同一个枚举类的变量,然后再返回差值。
枚举类的name()方法。
它和toString()方法的返回值一样,事实上,这两个方法本来就是一样的:
这两个方法的默认实现是一样的,唯一的区别是,你可以重写toString方法。name变量就是枚举变量的字符串形式。
还有一些其他的方法我就暂时不介绍了,感兴趣的话可以自己去看看文档或者源码,都挺简单的。
要点:
使用的是enum关键字而不是class。
多个枚举变量直接用逗号隔开。
枚举变量最好大写,多个单词之间使用”_”隔开(比如:INT_SUM)。
定义完所有的变量后,以分号结束,如果只有枚举变量,而没有自定义变量,分号可以省略(例如上面的代码就忽略了分号)。
在其他类中使用enum变量的时候,只需要【类名.变量名】就可以了,和使用静态变量一样。
但是这种简单的使用显然不能体现出枚举的强大,我们来学习一下复杂的使用:





