枚举之前定义常量就需要 public static fianl...,列如:

public static final int MONDAY =1; 
public static final int TUESDAY=2;
public static final int WEDNESDAY=3; public static final int THURSDAY=4;
public static final int FRIDAY=5;
public static final int SATURDAY=6; 
public static final int SUNDAY=7;

上述的常量定义常量的方式称为int枚举模式,这样的定义方式并没有什么错,
但它存在许多不足,如在类型安全和使用方便性上并没有多少好处,如果存在定义int值相同的变量,
混淆的几率还是很大的,编译器也不会提出任何警告,
因此这种方式在枚举出现后并不提倡,现在我们利用枚举类型来重新定义上述的常量,同时也感受一把枚举定义的方式

//枚举类型,使用关键字enum enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明
int ordinal() 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强:

enum Signal {
 GREEN, YELLOW, RED
}public class Stutent {
 public void change(Signal color) {
 switch (color) {
 case RED:
 color = Signal.GREEN;
 System.out.println("sdsd");
 break;
 case YELLOW:
 color = Signal.RED;
 break;
 case GREEN:
 color = Signal.YELLOW;
 break;
 }
 }
}

用法三:向枚举中添加新属性

public enum Error {
 BOLE_ERROR("无敌于天下", 1), BOLE_ERROR2("独孤求败", 2), BOLE_ERROR3("独孤求败3", 3);
 private String name;
 private Integer index; private Error(String name, Integer index) {
 this.name = name;
 this.index = index;
 } public String getName() {
 return name;
 } public Integer getIndex() {
 return index;
 }}

只用get方法就行了,通过构造器赋值。

用法四:向枚举中添加相关的常量的方法

java 的enum有一个非常有趣的特性,即它允许程序员为enum实列编写方法,从而为每个enum实列赋予各自不同的行为。要实现相关的方法,你需要

为enum定义一个或者多个abstract方法,然后为每个实列实现该抽象方法:

public enum ConstantSpecificMethod {
 DATE_TIME {
 String getInfo() {
 return DateFormat.getDateInstance().format(new Date());
 }
 },
 CLASSPATH {
 String getInfo() {
 return System.getenv("CLASSPATH");
 }
 },
 VERSION {
 String getInfo() {
 return System.getProperty("java.version");
 }
 };
 abstract String getInfo(); public static void main(String[] args) {
 System.out.println(ConstantSpecificMethod.DATE_TIME.getInfo());

 }
}

用法五:实现接口

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); 
 } 
}

用法六:使用接口组织枚举

public interface Food { 
 enum Coffee implements Food{ 
 BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO 
 } 
 enum Dessert implements Food{ 
 FRUIT, CAKE, GELATO 
 } 
}

枚举集合EnumSet.向EnumSet添加enum实列的顺序并不重要,因为其输出的次序决定于enum实列定义时的次序,只能放枚举定义的类型,

enum FOOD {
 APPLE, TTTT, AAAA, CCCC, DDDD
}public class TestSet {
 public static void main(String[] args) {
 EnumSet<FOOD> set=EnumSet.noneOf(FOOD.class);
 set.add(FOOD.APPLE);
 set.add(FOOD.TTTT);
 for (FOOD enum1 : set) {
 System.out.println(enum1.name());
 }

 }}

 EnumMap的使用:

EnumMap是一种特殊的Map,它要求其中的键(key)必须来自一个enum.由于enum本身的限制,所以EnumMap在内部可由数组实现。因此EnumMap的速度很快,我们可以放心

地使用enum实列在EnumMap中进行查找操作。不过,我们只能将enum的实列作为键来调用put()方法,其他操作与使用一般的Map差不多。与EnumSet一样,enum实列定义

的次序决定了在其EnumMap中的顺序。 

public class EnumMapps {

 public static void main(String[] args) {
 EnumMap<Color,Command> em=new EnumMap<Color,Command>(Color.class); 
 em.put(Color.BACK, new Command() {
 @Override
 public void action() {
 System.out.println("Color.BACK ");
 }
 });
 em.put(Color.GRREN, new Command() {
 @Override
 public void action() {
 System.out.println("Color.GRREN ");
 }
 });

 for(Map.Entry<Color, Command> e:em.entrySet()){
 em.get(Color.BACK).action();
 }


 }}