Java中的枚举可以理解为一种特殊的类,类里面是可以有方法,有变量的。当声明一个枚举的时候,也可以有如上的类型, 我们也可以对枚举的权限进行声明。枚举的优点可以自定义数据类型,还可以限制用户的选择权。
我们举例声明出一个枚举,每周七天的枚举。
public enum weekend{
monday,tuesday,wensday,firday, thusday,satday,sunday;
}
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 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;
}
}
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 也要进行私有化,防止外界的非法更改。
!!!思考,用枚举怎样实现单例模式!!!
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 也要进行私有化,防止外界的非法更改。
!!!思考,用枚举怎样实现单例模式!!!