1.enum在这样使用时分号不是必须的。
public enum Season{ SPRING,SUMMER,AUTUMN,WINTER }2.enum在使用时,会创建 ordinal() 方法,该方法会标明枚举常量的声明顺序。还会生成 static values() 方法,会按照顺序返回常量值组成的数组:
public static void main(String[] args){ for(Season s:Season.values()){ println(s.ordinal()+s); } }enum还可以用于switch,通常switch语句只能使用数值。
3.enum可以用于单例模式:
public enum Singleton{ INSTANCE; ... }这种方式是实现单例模式的最佳方法
enum可以看成是一个类,可以对enum中的类进行重写,也可以对其构造方法进行重写。
public enum Operation{ //mSymbol赋值“+”,apply()重写为求和 PLUS("+"){double apply(double x,double y){return x+y}}, MINUS("-"){double apply(double x,double y){return x-y}}, TIMES("*"){double apply(double x,double y){return x*y}}, DIVIDE("+"){double apply(double x,double y){return x/y}}, private final String mSymbol; Operation(String symbol){ mSymbol=symbol; } @override public String toString(){return mSymbol;} abstract double apply(double x,double y); }这样定义中,对Operation的构造方法和apply()方法都进行了重写,调用的效果为:
Operation.PLUS.apply(3,4);==========>7 Operation.PLUS;=============>"+"当一种分类完成后,枚举类型又可以按另一种分类方式分类时:
enum Day{ MONDAY(WorkDay.WEEKDAY), TUESDAY(WorkDay.WEEKDAY), WEDNESDAY(WorkDay.WEEKDAY), ... SUNDAY(WorkDay.WEEKEND); private final DayType mDt; Day(DayType dt){ mDt=dt; } dowhat(){ mDt.dowhat(); } private enum DayType{ WEEKDAY{void doWhat(){System.out.println("work")}}, WEEKEND{void doWhat(){System.out.println("have fun")}}; abstract void doWhat(); } }