枚举

来源:互联网 发布:专业的剪辑软件 编辑:程序博客网 时间:2024/06/02 02:01
  • 枚举类的对象是有限个的。
  • java1.5之前需要自定义枚举类,java1.5提供了声明枚举类的关键字enum。

自定义枚举类

如下所示自定义了一个枚举类week:

public class TestEnum{    public static void main(String[] args){        Week monday = Week.MONDAY;        System.out.println("今天是" + monday.getName());    }}class Week {    // 1. 提供类的属性,声明为 private final    private final String name;    // 2. 声明私有的构造器,并初始化final属性    private Week(String name){        this.name = name;    }    // 3. 提供调用属性的公共方法    public String getName() {        return name;    }    // 4. 创建枚举类的对象,将类的对象声明为public static final    public static final Week MONDAY = new Week("星期一");    public static final Week THESDAY = 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("星期日");    @Override    public String toString() {        return "Week{" +                "name='" + name + '\'' +                '}';    }}

使用enum关键字

使用enum定义枚举类可以省略实例对象前面的修饰符(类似接口一样默认所有成员变量都是常量)。

public class TestEnum{    public static void main(String[] args){        // values()方法:以一个数组的形式将枚举类的对象返回;        Week[] weeks = Week.values();        for(int i = 0; i < weeks.length; i++){            System.out.println(weeks[i]);        }        // valueOf(String name)方法:要求传入的形参name是枚举类对象的名字,否则会报java.lang.IllegalArgumentException        Week monday = Week.valueOf("MONDAY");    }}enum  Week {    MONDAY("星期一"),    THESDAY("星期二"),    WEDNESDAY("星期三"),    THURSDAY("星期四"),    FRIDAY("星期五"),    SATURDAY("星期六"),    SUNDAY("星期日");    // 1. 提供类的属性,声明为 private final    private final String name;    // 2. 声明私有的构造器,并初始化final属性    private Week(String name){        this.name = name;    }    // 3. 提供调用属性的公共方法    public String getName() {        return name;    }    @Override    public String toString() {        return "Week{" +                "name='" + name + '\'' +                '}';    }}

枚举类实现接口

可以让不同的枚举类的对象调用不同的重写方法。

public class TestEnum{    public static void main(String[] args){        Week[] weeks = Week.values();        for(int i = 0; i < weeks.length; i++){            weeks[i].say();        }    }}interface Say{    void say();}enum  Week implements Say {    MONDAY("星期一"){        @Override        public void say() {            System.out.println("又到了痛苦的周一。");        }    },    THESDAY("星期二"){        @Override        public void say() {            System.out.println("怎么才周二。");        }    },    WEDNESDAY("星期三"){        @Override        public void say() {            System.out.println("还得在坚持3天。");        }    },    THURSDAY("星期四"){        @Override        public void say() {            System.out.println("胜利在望。");        }    },    FRIDAY("星期五"){        @Override        public void say() {            System.out.println("为什么今天心情特别好。");        }    },    SATURDAY("星期六"){        @Override        public void say() {            System.out.println("懒洋洋的睡个美觉,我是宅男。");        }    },    SUNDAY("星期日"){        @Override        public void say() {            System.out.println("一到周日,焦虑、恐慌。");        }    };    // 1. 提供类的属性,声明为 private final    private final String name;    // 2. 声明私有的构造器,并初始化final属性    private Week(String name){        this.name = name;    }    // 3. 提供调用属性的公共方法    public String getName() {        return name;    }    @Override    public String toString() {        return "Week{" +                "name='" + name + '\'' +                '}';    }}

常用的简单的枚举类定义

一般比较常用的枚举对象是不需要定义对象属性的,这样只需如下简单的定义即可:

enum Size{    SAMALL,    MEDIUM,    LARGE;}
0 0
原创粉丝点击