枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。
java中的Enum类型更像是一个特殊的class,它可以有自己的数据域和方法。
java中的Enum类型有如下特征:
1、他不能有public构造函数,用来保证其无法实例化。
2、所有的枚举类型是public static final
3、Enum重载了toString方法,因此我们如果调用Color.BLUE.toString()默认返回字符串”BLUE”.
4、Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用.valueOf(“BLUE”)将返回Color.BLUE.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。
5、Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。
6、Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。
用法一:常量
import java.util.Arrays; /** * Created by N3verL4nd on 2016/11/21. */ enum Color{ RED, GREEN, BLUE } public class HelloWorld { public static void main(String[] args) { Color color = Color.valueOf("RED"); System.out.println(color.toString()); Color[] arr = Color.values(); System.out.println(Arrays.toString(arr)); } }
用法二:switch
import java.util.Arrays; /** * Created by N3verL4nd on 2016/11/21. */ enum Color{ RED, GREEN, BLUE } public class HelloWorld { public static void main(String[] args) { Color color = Color.BLUE; switch (color){ case RED: System.out.println("RED"); break; case GREEN: System.out.println("GREEN"); break; case BLUE: System.out.println("BLUE"); break; default: break; } } }
用法三:向枚举中添加新方法
/** * Created by N3verL4nd on 2016/11/21. */ enum Color{ RED("this is red"), GREEN("this is green"), BLUE("this is blue"); private String desc; private Color(String desc){ this.desc = desc; } public String getDesc() { return desc; } } public class HelloWorld { public static void main(String[] args) { Color red = Color.RED; System.out.println(red + ": " + red.getDesc()); } }
用法四:覆盖枚举的方法
比如重写toString方法:
/** * Created by N3verL4nd on 2016/11/21. */ enum Color{ RED("this is red"), GREEN("this is green"), BLUE("this is blue"); private String desc; private Color(String desc){ this.desc = desc; } public String getDesc() { return desc; } @Override public String toString() { switch (this){ case RED: return "Color.RED"; case GREEN: return "Color.GREEN"; case BLUE: return "Color.BLUE"; default: return ""; } } } public class HelloWorld { public static void main(String[] args) { Color red = Color.RED; System.out.println(red.toString() + ": " + red.getDesc()); } }
参考:
http://blog.lichengwu.cn/java/2011/09/26/the-usage-of-enum-in-java/
http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html
https://www.ibm.com/developerworks/cn/java/j-lo-enum/