【JAVA基础】枚举(enum)用法

来源:互联网 发布:office卸载软件 编辑:程序博客网 时间:2024/06/05 09:36

一些程序在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,jdk5以前采用自定义类来解决,jdk5以后可以直接采用枚举来解决

枚举的特性

1、枚举是一种特殊形式的java类
2、枚举类中声明的每一个枚举值代表枚举类的一个实例对象
3、与java中的普通类一样,在声明枚举;类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的
4、枚举类也可以实现接口或继承抽象类
5、jdk5中扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型

用法一:常量

在jdk1.5之前,我们定义常量都是:public static final….。jdk1.5出现以后,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

enum Grade{   //Class      A,B,C,D;  //Object}

用法二:switch

jdk1.6之前的switch语句只支持int,byte,char,short,enum类型。

enum Grade{    A,B,C,D;}public class Demo{    Grade grade=Grade.A;    public void test(){        switch(grade){        case A:            grade=Grade.A;            break;        case B:            grade=Grade.B;            break;        case C:            grade=Grade.C;            break;        case D:            grade=Grade.D;            break;        }    }}

用法三:向枚举中添加新方法

如果打算定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且java要求必须先定义enum实例。

enum Grade{    A("100-80"),B("79-70"),C("69-60"),D("59-0");    //成员变量    private String value;//封装每个对象对应的分数    //构造方法    public Grade(String value){        this.value=value;    }    //普通方法    public static String getName(int index){        for(Grade g:Grade.values()){            if(g.getValue()==value){                return g.value;            }        }        return null;    }    //get set方法    public String getValue(){        return this.value;    }    public void setValue(){        this.value=value;    }}

用法四:覆盖枚举的方法

下面是一个toString()方法覆盖的例子

public class Demo{    enum Grade{        A("100-80"),B("79-70"),C("69-60"),D("59-0");        //成员变量        private String value;        //构造方法        private Grade(String name){            this.value=value;        }        //覆盖方法        @Override        public String toString(){            return this.value;        }    }    public static void main(String[] args){        System.out.println(Grade.A.toString());    }}

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于java不支持多继承,所以枚举对象不能再继承其他类。

public interface Behaviour {        void print();        String getInfo();    }    public enum Grade implements Behaviour {        A("100-80"),B("79-70"),C("69-60"),D("59-0");;        // 成员变量        private String value;        // 构造方法        private Grade(String value) {            this.value= value;        }        // 接口方法        @Override        public String getInfo() {            return this.value;        }        // 接口方法        @Override        public void print() {            System.out.println(this.value);        }    }

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

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

用法七:

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的key是enum类型,而value则可以是任意类型,具体可以参考JDK API文档。

枚举和常量定义的区别

1、通常定义常量的方法
通常利用public final static方法定义的代码如下,分别用1表示A,2表示B,3表示C。

public class Grade{    /*A*/    public final static int A = 1;    /*B*/    public final static int B = 2;    /*c*/    public final static int c = 3;}

2、枚举类型定义常量方法
枚举类型的简单定义方法如下:

enum Grade{    A,B,C;}
原创粉丝点击