枚举

来源:互联网 发布:易语言聊天机器人源码 编辑:程序博客网 时间:2024/06/05 22:50

枚举是从Java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合。

枚举的定义

定义格式:

[修饰符] enum 枚举类名{    常量A,常量B,常量C;}

Demo:

public enum Weekday{    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}

枚举类的特点

①枚举的直接父类java.lng.Enum,但是不能继承Enum
②枚举就相当于,可以定义构造方法,成员变量、普通方法和抽象方法。
③默认私有的构造方法,即使不写访问权限也是private(假构造器,底层没有无参构造器)。
④每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限,不能使用new关键字。
⑤枚兴实例必须位于枚举体中的最开始部分,枚举实例列表的后要有分号与其他成分相隔。
⑥枚举实例后有花括号中,该实例是枚举类的匿名内部类对象(查看编译后的class)。

枚举类的使用

1):枚举中都是全局公共的静态常量,可以直接使用枚举类名调用。        Weekday day= Weekday.SATURDAY;
2):因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法。        String name=枚举对象.name();   //返回枚举对象的常量名称        int ordinal=枚举对象.ordinal();   //返回枚举对象的序号,从0开始        String str=枚举对象.toString();   //返回枚举对象的常量名称
3):编译器生成的枚举类的静态方法    枚举类型[] values();    Weekday[] ws = Weekday.values();     返回当前枚举类型所有的常量,使用一个数组封闭起来。    枚举类型 valueof(String name);    把一个指定名称字符串转换为当前枚举类中同名的常量。
4):从Java5开始出现枚举,switch也操作枚举类型。        switch只支持Int类型,云持枚举是因为底层使用的枚举对象ordinal.而ordinal的类型依然是int类型。

Demo:

题目1:设置每周的那一天休息,要求不使用枚举

要求:只能使用规定的几个参数。

无枚举实现

class Week{    //私有化构造器    private Week(){    }    //定义常量静态对象    public static final Week MONDAY = new Week();    public static final Week TUESDAY = new Week();    public static final Week WEDNESDAY = new Week();    public static final Week THURSDAY = new Week();    public static final Week FRIDAY = new Week();    public static final Week SATURDAY = new Week();    public static final Week SUNDAY = new Week();}public class Employee {    //定义一个字段来表示休息日     private Week restday;     //geter、seter方法    public Week getRestday() {        return restday;    }    public void setRestday(Week restday) {        this.restday = restday;    }    //如果对象名相等就输出    public void happy(){        if(restday==Week.MONDAY){            System.out.println("周一休息");        }else if(restday==Week.TUESDAY){            System.out.println("周二休息");        }else if(restday==Week.WEDNESDAY){            System.out.println("周三休息");        }else if(restday==Week.THURSDAY){            System.out.println("周四休息");        }else if(restday==Week.FRIDAY){            System.out.println("周五休息");        }else if(restday==Week.SATURDAY){            System.out.println("周六休息");                 }else if(restday==Week.SUNDAY){            System.out.println("周日休息");        }else{            System.out.println("你输出的不合法");        }    }    public static void main(String[] args) {        //创建一个对象        Employee e = new Employee();        //调用方法赋值属性        e.setRestday(Week.MONDAY);        //执行方法        e.happy();    }    }

题目2:使用枚举实现题目1

//枚举类enum EveryWeek{    //常量对象    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;}public class EmployeeEnum {    //私有字段    private EveryWeek restday;    //geter,seter方法    public EveryWeek getRestday() {        return restday;    }    public void setRestday(EveryWeek restday) {        this.restday = restday;    }    //定义一个方法,用来判断何时休息    public void list(){        switch (restday) {        case MONDAY:            System.out.println("周一休息");            break;        case TUESDAY:            System.out.println("周二休息");            break;        case WEDNESDAY:            System.out.println("周三休息");            break;        case THURSDAY:            System.out.println("周四休息");            break;        case FRIDAY:            System.out.println("周五休息");            break;        case SATURDAY:            System.out.println("周六休息");            break;        case SUNDAY:            System.out.println("周日休息");            break;        default:            break;        }    }    //main方法    public static void main(String[] args) {        EmployeeEnum ee = new EmployeeEnum();   //创建一个对象        ee.setRestday(EveryWeek.SUNDAY);     //给变量赋值        ee.list();      //调用方法查看在何时休息        //返回指定枚举常量的名称        System.out.println(EveryWeek.SUNDAY.name());        //返回指定枚举常量的序列号,从0开始的。        System.out.println(EveryWeek.SUNDAY.ordinal());        //返回指定枚举常量的名称        System.out.println(EveryWeek.SUNDAY.toString());        //返回枚举中所有常量,并存在一个数组中        EveryWeek[] weeks=EveryWeek.values();            for(EveryWeek everyWeek:weeks){                System.out.print(everyWeek.toString());             }    }}
原创粉丝点击