为什么需要枚举? 一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。 JDK 5新增的 enum 关键字用于定义一个枚举类。
枚举类具有如下特性:
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
枚举类也可以实现接口、或继承抽象类。
JDK5中扩展了swith语句,它除了可以接收int, byte, char, short外,还可以接收一个枚举类型。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。
package cn.itcast.enumeration;
import org.junit.Test;
public class Demo1 {
enum Grade{
A("100-90"),B("89-80"),c("79-70"),D("69-60"),E("59-0");//相当于Object
private String value;
private Grade(String value){
this.value =value;
}
public String GetValue(){
return this.value +" "+ this.name();
}
}
@Test
public void test1() {
Print(Grade.A); //会输出 100-90 A
}
private void Print(Grade g){
String value= g.GetValue();
System.out.println(value);
}
}
=============
带抽象方法的枚举:
可以在里面定义抽象方法
不过写的方法看起来有点傻,暂时看不出优点,也不是类似继承的增强,
enum 是public static final的 enum又是可以定义抽象方法 感觉有矛盾
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package cn.itcast.enumeration; import org.junit.Test; public class Demo1 { enum Grade { A("100-90") { public String GetLocaleValue() { return "成绩优秀"; } }, B("89-80") { public String GetLocaleValue() { return "成绩良"; } }, c("79-70") { public String GetLocaleValue() { return "成绩一般"; } }, D("69-60") { public String GetLocaleValue() { return "成绩及格"; } }, E("59-0") { public String GetLocaleValue() { return "成绩差"; } };// 相当于Object private String value; private Grade(String value) { this.value = value; } public String GetValue() { return this.value + " " + this.name(); } public abstract String GetLocaleValue();//不可以带body部分的{} } @Test public void test1() { Print(Grade.A); // 会输出 100-90 A } private void Print(Grade g) { String value = g.GetValue(); System.out.println(value); System.out.println(g.GetLocaleValue()); } }
------------推荐两篇不错博客
java基础加强--实现带有抽象方法的枚举 - 时间挤挤 - 博客频道 - CSDN.NET
http://blog.csdn.net/congwiny/article/details/18894641
Java 枚举用法详解 - 静默虚空 - 博客园
http://www.cnblogs.com/jingmoxukong/p/6098351.html