java Enum的使用方法

来源:互联网 发布:驾校预约软件 编辑:程序博客网 时间:2024/05/17 10:05

一;关于Java Enum

Enum一般用来表示一组相同的常量。如性别、日期、月份、星期、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较的时候可以用”==”来替换equals.是一种好的习惯。 JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代。有了Java Enum之后,可以更贴近的表示这种常量。

API文档里Enum的构造方法:protected Enum(String name,int ordinal)单独的构造方法。程序员无法调用此构造方法。该构造方法用于由响应枚举类型声明的编译器发出的代码。

二: Java Enum的使用

注意:枚举就可以被声明为它们自己独立的类,或者被声明为类成员,但是不能在方法内声明它们。  因为枚举是一种特殊的类,因而它不仅用于列出枚举的常量值。可以为枚举添加构造函数、实例变量、方法,以及一种称为“常量特定类体“的东西。 但是绝对不能直接调用枚举的构造函数,通过在常量值后面定义的变元,会自动调用枚举构造函数。可以为构造函数定义多个变元,并且可以重载枚举构造函数,就像重载一个普通的类的构造函数一样。

简单的用法:Java Enum简单的用法是用于代表一组常用常量,可用来代表一类相同类型的常量值。如:

 pubic enumSexEnum {  male,female; }  // 且枚举常量一定要放在开头,并且以 ;结束

枚举对象里面的枚举值必须是唯一的,可以通过Enum类型名直接引用该常量,如 sexEnum.male, sexEnum.female.

    复杂用法:Java为枚举类型提供了一些内置的方法,同时枚举常量还可以有自己的方法。可以很方便的枚举对象,如下例所示:

三:实例代码

 

代码一: WeekDay.java

package liao.qianwen.test;

public enum WeekDay {

   Mon("Mondy"),Tue("Tuesday"),Wen("Wensday"),Thu("Thursday"),Fri("Friday"),Sat("Saturday"),Sun("Sunday");

   private final String day;

   private WeekDay(String day){

      this.day = day;

   }

   public static void printDay(int i) {

      switch(i) {

      case 1:

         System.out.println(WeekDay.Mon);break;

      case 2:

         System.out.println(WeekDay.Tue);break;

      case 3:

         System.out.println(WeekDay.Wen);break;

      case 4:

         System.out.println(WeekDay.Thu);break;

      case 5:

         System.out.println(WeekDay.Fri);break;

      case 6:

         System.out.println(WeekDay.Sat);break;

      case 7:

         System.out.println(WeekDay.Sun);break;

      }

   }

   public  String getDay() {

      return day;

   }

}

代码二: testEnum.java

package liao.qianwen.test;

public class testEnum {

    public static void main(String[] args) {

       for(WeekDay day: WeekDay.values()) {

          System.out.println(day +"=====>"+day.getDay());

       }

       WeekDay.printDay(5);

    }

}


在cmd中到该类的目录下,非包目录。然后执行: javap 枚举名

E:\zllab\workspace\wenTest\bin>javap liao/qianwen/test.WeekDay

Compiled from "WeekDay.java"

public final class liao.qianwen.test.WeekDay extends java.lang.Enum{

    public static final liao.qianwen.test.WeekDay Mon;

    public static final liao.qianwen.test.WeekDay Tue;

    public static final liao.qianwen.test.WeekDay Wen;

    public static final liao.qianwen.test.WeekDay Thu;

    public static final liao.qianwen.test.WeekDay Fri;

    public static final liao.qianwen.test.WeekDay Sat;

    public static final liao.qianwen.test.WeekDay Sun;

    static {};

    public static void printDay(int);

    public java.lang.String getDay();

    public static liao.qianwen.test.WeekDay[] values();

    public static liao.qianwen.test.WeekDay valueOf(java.lang.String);

}


虽然在Java的ApI文档中Enum类没有显示有Values()方法,也许这就是Enum类和enum关键字的不同之处。但是通过反编译,可以得出以下信息:

l 1 .WeekDay是Enum的子类(可以很清楚的看到,其实JVM是将enum变成一个继承Enum的类,他进行了一系列的操作。

l  2.枚举常量是以publicstatic final 类常量的形式实现的。

l 3. 编译器自动生成了values()和valueof()方法

    所以实际上Enum类型就是以Java类来实现的,没有什么新的特点,只不过java编译器帮我们做了语法的解析和编译。完全也可以自己实现。但是既然有这样方便一个东西,当然会去用了。

原创粉丝点击