Java中的枚举可以理解为一种特殊的类,类里面是可以有方法,有变量的。当声明一个枚举的时候,也可以有如上的类型, 我们也可以对枚举的权限进行声明。枚举的优点可以自定义数据类型,还可以限制用户的选择权。
我们举例声明出一个枚举,每周七天的枚举。
public enum weekend{ monday,tuesday,wensday,firday, thusday,satday,sunday;}
这样,我们可以使用增强FOR循环来遍历并输出:
public void show(){ weekend a[]=weekend.value;//value可以得到整个枚举集合的数组 a[]中为weekend中的所有元素。 for(weekend w:a){ System.out.println(w); }}
如果需要将其转换成中文,可以中文转换。
public enum weekend{ monday("星期一") ,tuesday("星期二") ,wensday("星期三") ,firday("星期五") ,thusday("星期四") ,satday("星期六") ,sunday("星期日"); private String chnValue; //每一个枚举中元素进行初始化的时候 都可以调用初始值对自己的chnValue进行赋值。 private weekend(String value){ this.chnValue=value; }}
首先在枚举列表下面定义一个私有的变量,这样枚举中的每一个元素都有一个属性chnValue。枚举中被创建的时候,每一个枚举都会调用构造方法weekend。使之对其进行初始化。初始化时通过传入不同的值,从而对每一个枚举值进行赋值。
如果,希望通过一个枚举英文星期,得到其中文日期,则我们可以通过调用一个方法来对其进行输入。由于我们要在没一个元素内都调用一次。并且每一次调用所返回的中文是不一样的。故考虑采用抽象方法加匿名类来实现。
例子
public enum weekend{ monday("星期一") { public void showCHN(){ System.out.println(chnValue); } } //匿名类来实现枚举中的抽象方法 ,tuesday("星期二") ,wensday("星期三") ,firday("星期五") ,thusday("星期四") ,satday("星期六") ,sunday("星期日"); private String chnValue; //每一个枚举中元素进行初始化的时候 都可以调用初始值对自己的chnValue进行赋值。 private weekend(String value){ this.chnValue=value; } public abstract void showCHN(); //使用抽象类通过在每一个匿名类中的重载,来实现方法} 注意:为什么要对weekend 构造函数进行私有化, 答:保证外界无法通过调用构造函数再实例化出一个非法的枚举 同理 string 也要进行私有化,防止外界的非法更改。 !!!思考,用枚举怎样实现单例模式!!!