[Java 基础]枚举的应用

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 也要进行私有化,防止外界的非法更改。
      !!!思考,用枚举怎样实现单例模式!!!

你可能感兴趣的:(java,枚举)