Java 枚举类

来源:互联网 发布:双色球独胆计算法 编辑:程序博客网 时间:2024/06/05 03:25

enum关键字用于定义枚举类,若枚举只有一个成员, 则可以作为一种单例模式的实现方式。

 
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
 
必须在枚举类的第一行声明枚举类对象。
枚举类和普通类的区别:
       1.使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
       2.枚举类的构造器只能使用 private 访问控制符
       3.枚举类的所有实例必须在枚举类中显式列出(以,分隔 以; 结尾). 列出的实例系统会自动添加 public static final 修饰
 
JDK1.5之前需要自定义枚举类:
 
复制代码
/*枚举类的自定义方式*/public class TestSeason {    public static void main(String[] args){         Season spring=Season.SPRING;         System.out.println(spring);         System.out.println(spring.getSeasonName());    }}//枚举类class Season{    //1.提供类的属性,声明为private final    private final String seasonName;    private final String seasonDesc;    //2.声明为final的属性,在构造器中初始化    private Season(String seasonName,String seasonDesc){        this.seasonName=seasonName;        this.seasonDesc=seasonDesc;    }     public static final Season SPRING=new Season("spring","春暖花开");    public static final Season SUMMER=new Season("summer","夏日炎炎");    public static final Season AUTOMN=new Season("automn","秋高气爽");    public static final Season WINTER=new Season("winter","白雪皑皑");        //通过公共的方法来调用属性    public String getSeasonName() {        return seasonName;    }    public String getSeasonDesc() {        return seasonDesc;    }    @Override    public String toString() {        return "Season [seasonName=" + seasonName + ", seasonDesc="                + seasonDesc + "]";    }}  
复制代码
JDK 1.5 新增的 enum 关键字用于定义枚举类:
     枚举类的主要方法:
         1.values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
         2.valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。
     若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法
复制代码
/* * 一.枚举类 * 1.如何自定义枚举类 * 2.如何使用enum关键字定义枚举类 *      常用的方法;values(),valueOf(String str) *      如何使枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同(相当于每个对象重写抽象方法) * */public class TestSeason1{    public static void main(String[] args){        SeasonEnum spring=SeasonEnum.SPRING;        System.out.println(spring);        System.out.println(spring.getSeasonName());                //1.values方法可以返回枚举类型的对象数组,可以方便遍历所有的枚举值        SeasonEnum[] seasons=SeasonEnum.values();        for(int i=0;i<seasons.length;i++){            System.out.println(seasons[i]);        }        //2.valueOf方法可以把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对象的“名字”        String str="WINTER";        SeasonEnum sea=SeasonEnum.valueOf(str);        System.out.println(sea);        //不同的枚举类对象调用重写的show方法得到不同的效果        spring.show();        sea.show();            }}//接口interface Info{    public void show();}//实现接口的枚举类enum SeasonEnum implements Info{     //必须在枚举类的第一行声明枚举类对象    SPRING("spring","春暖花开"){        public void show(){            System.out.println("春天在哪里");        }    },    SUMMER("summer","夏日炎炎"){        public void show(){            System.out.println("生如夏花");        }    },    AUTOMN("autumn","秋高气爽"){        public void show(){            System.out.println("金色的秋天");        }    },    WINTER("winter","白雪皑皑"){        public void show(){            System.out.println("冬天里的一把火");        }    };        private final String seasonName;    private final String seasonDesc;        private SeasonEnum(String seasonName, String seasonDesc) {        this.seasonName = seasonName;        this.seasonDesc = seasonDesc;    }        public String getSeasonName() {        return seasonName;    }        public String getSeasonDesc() {        return seasonDesc;    }}