枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。下面就是一个典型枚举类型的定义:
显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类,而且是类库中Enum类的子类(java.lang.Enum<E>)。
下面是我自己写的例子:
- public enum Color{
- RED,BLUE,BLACK,YELLOW,GREEN
- }
显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类,而且是类库中Enum类的子类(java.lang.Enum<E>)。
- 1、Color枚举类是特殊的class,其枚举值(RED,BLUE...)是Color的类对象(类实例):Color c=Color.RED;而且这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
- 2、即然枚举类是class,当然在枚举类型中有构造器,方法和数据域。但是,枚举类的构造器有很大的不同:
- (1) 构造器只是在构造枚举值的时候被调用。
- (2) 构造器只能私有private,绝对不允许有public构造器。这样可以保证外部代码无法新构造枚举类的实例。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。 但枚举类的方法和数据域可以允许外部访问。
下面是我自己写的例子:
- public class Test{
- public static void main(String[] args) throws Exception
- {
- Test.outputWeekDay(WeekDay.Monday);
- }
- public static void outputWeekDay(WeekDay w)
- {
- System.out.println(w);
- }
- }
- enum WeekDay
- {
- Monday(1),Tuesday(2),Wednesday(3);
- private int weekValue;
- private WeekDay(int weekValue)
- {
- this.weekValue = weekValue;
- }
- @Override
- public String toString()
- {
- // TODO Auto-generated method stub
- return String.valueOf(this.weekValue);
- }
- }