黑马程序员——————java中的枚举

------- android培训、java培训、期待与您交流! ----------

在实际编程中,往往存在着这样的数据集它们的数值在程序中是稳定的

而且数据集中的元素是有限的。例如星期一到星期日七个数据元素组成了

一周的数据集,春夏秋冬四个数据元素组成了四季的数据集Java

想表示这种数据集最容易想到的写法可能是这样,我们以表示一周五天的工

作日来举例: 

public class WeekDay {

        publicstatic final int MONDAY = 1;

        publicstatic final int TUESDAY = 2;

        publicstatic final int WENSDAY = 3;

        publicstatic final int THURSDAY = 4;

        publicstatic final int FRIDAY = 5;

}
现在,你的类就可以使用像 WeekDay.TUESDAY 这样的常量了。 但是这里隐藏着一些问题,这些常量是 Java int 类型的常量,

这意味着该方法可以接受任何int 类型的值,即使它和WeekDay中定义的所有日期都对应不上。

要解决这个问题就用到了枚举

 我们先来写一个简单的枚举类型的定义:

public enum WeekDay{

         MONDAY, TUESDAY, WENSDAY, THURSDAY, FRIDAY; //最后这个“;可写可不写。

}


注意:虽然所有的枚举类型都继承自java.lang.Enum,但是你不能绕过

关键字“enum”而使用直接继承Enum方式来定义枚举类型。编译器会

提示错误来阻止你这么做。    WeekDay中定义的五个枚举常量之间使用“  ,  ”分割开来。

这些常量默认都是“public static final”的,所以你就不必再为它们加上“public static final”

修饰(编译器会提示出错),这也是为什么枚举常量采用大写字母来命名的原因。而且每

一个常量都是枚举类型WeekDay的一个实例。你可以通过类似“WeekDay.MONDAY”这种

格式来获取到WeekDay中定义的枚举常量,也可以采用类似“WeekDay oneDay =

WeekDay.MONDAY”的方式为枚举类型变量赋值(你不能给枚举类型变量分配除了枚举常

量和null以外的值,编译器会提示出错)。


  枚举类型除了拥有Enum提供的方法以外,还存在着两个隐藏着的与具体枚举类型相关的静态

方法——values()和valueOf(String arg0)。方法values()可以获得包含所有枚举常量的数组;

方法valueOfjava.lang.Enum中方法valueOf的简化版本,你可以通过它,根据传递的名称来

得到当前枚举类型中匹配的枚举常量。


我们来看一个枚举类型使用的小例子。需求中要求可以对指定的日期进行

相应的信息输出。对于这么简单的需求,这里就使用枚举类型来进行处理。

前面我们已经定义好了包含有五个工作日的枚举类型。下面的代码则是进行

输出的方法:

/**

         * 根据日期的不同输出相应的日期信息。

         *@param weekDay     代表不同日期的枚举常量

         */

         publicvoid printWeekDay(WeekDay weekDay){

            switch(weekDay){

             caseMONDAY:

                System.out.println(“Todayis Monday!”);

break;

             caseTUESDAY:

                System.out.println(“Todayis Tuesday!”);

break;

             caseWENSDAY:

                System.out.println(“Todayis Wensday!”);

break;

             caseTHURSDAY:

                System.out.println(“Todayis hursday!”);

break;      
             caseFRIDAY:

                System.out.println(“Todayis Friday!”);

break;     

             default:
                thrownew AssertionError("Unexpected value: " + weekDay);

                   }

         }

 在JDK1.5以前,switch操作仅能对int、short、char和byte进行操作。

而在JDK1.5中,switch增加了对枚举类型的支持,因为枚举类型仅含

有有限个可以使用整数代替的枚举常量,这太适合使用switch语句了!

就像上面代码中那样,你在swtich表达式中放置枚举类型变量,就可以

在case标示中直接使用枚举类型中的枚举常量了。


实现带构造方法的枚举:

enum WeekDay
{
 SUN,MON,TUE,WED,THT,FRI,SAT;
 private int num;
 private WeekDay()
{
     System.out.println("first");
    }
private WeekDay(int num)
{
  this.num=num;
}
}

实现带有抽象方法的枚举:

enum TrafficLamp
{
  public abstract TrafficLamp nextLamp();
  private int num;
  private TrafficLamp(int num)
{
        this.num=num;
    }
  RED(30)
{
      public TrafficLamp nextLamp()
{
     return YELLOW;
   }
    };
GREEN(45)
{
      public TrafficLamp nextLamp()
{
     return RED;
   }
    };
YELLOW(5)
{
      public TrafficLamp nextLamp()
{
     return GREEN;
    };
}

------- android培训、java培训、期待与您交流! ----------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值