定义:它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。(来自百度百科)
应用场景:1)声明几种HTTP网络请求方式:GRT,POST,PUT,DELETE等;
2)声明游戏中的一组道具;
JDK5.0开始Sun引进了一个全新的关键字enum来定义一个枚举类:
public abstract class enum extends Object implements Serializable Comparable<T>
下面是一个典型的枚举类的写法:
public enum FruitEnum { ORANGE, BANANA, APPLE };
1.FruitEnum枚举类很像特殊的class,其枚举值(ORANGE, BANANA, APPLE)是FruitEnum的类对象(类实例):
而且这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
2.我们声明的枚举类都是类库中Enum类的子类(java.lang.Enum<E>),它们继承了这个Enum中的许多有用的方法。
3.enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承了 java.lang.Enum(java继承的单一性)。
4.测试:
package enumtest; public class EnumTest { public static void main(String[] args) { // TODO Auto-generated method stub EnumTest enumTest = new EnumTest(); System.out.println("-------------------------"); enumTest.tesFruitEnum(FruitEnum.BANANA); System.out.println("-------------------------"); enumTest.testEnumIndex(); System.out.println("-------------------------"); enumTest.testFruitEnumValues(); } /** * 定义一个枚举类型 */ public enum FruitEnum { ORANGE, BANANA, APPLE }; /** * * 通过“枚举名.值”取得枚举中的值,可配合switch语句使用 */ private void tesFruitEnum(FruitEnum fruitEnum) { switch (fruitEnum) { case ORANGE: System.out.println("I am an ORANGE."); break; case BANANA: System.out.println("I am a BANANA."); break; case APPLE: System.out.println("I am an APPLE."); break; default: System.out.println("I am not FruitEnum."); break; } } /** * 枚举的索引位置,默认从0开始 */ private void testEnumIndex() { System.out.println(FruitEnum.ORANGE.name()+","+FruitEnum.ORANGE.ordinal()); System.out.println(FruitEnum.BANANA.name()+","+FruitEnum.BANANA.ordinal()); System.out.println(FruitEnum.APPLE.name()+","+FruitEnum.APPLE.ordinal()); } /** * FruitEnum枚举中的值 */ private void testFruitEnumValues() { for(FruitEnum fruitEnum:FruitEnum.values()) { System.out.println(fruitEnum); } } }
运行结果:
-------------------------
I am a BANANA.
-------------------------
ORANGE,0
BANANA,1
APPLE,2
-------------------------
ORANGE
BANANA
APPLE