JAVA enum的用法

最近又看了一遍JAVA编程思想。要不是我之前有看书画线的习惯。我真的有怀疑我之前居然TMD的看过这本书。

昨天晚上看到了ENUM这个章节。之前这个特性一直用的很少,因为只知道它常量的特性,不过一般都用final static来替代了,也很少再去打开一个类来定义一段字段。

首先java ENUM是1.5之后才有的特性,一般用来一组有相同特性的相同类型的常量。使用方法很简单,定义:

public enum DynElement {
    TEXT,
    DYNAMIC,
    ISEQUAL,
    ISNOTEQUAL,
    ISGREATTHAN,
    ISGREATEQUAL,
    ISLESSTHAN,
    ISLESSEQUEAL,
    ISPROAVAILABLE,
    ISNOTPROAVAILABLE,
    ISNULL,
    ISNOTNULL,
    ISEMPTY,
    ISNOTEMPTY,
    ISPARAMETERPRESENT,
    ISNOTPARAMETERPRESENT,
    ITERATE;
}
调用的时候直接enum名称点常量就可以了
    public static void main(String args[]){
        System.out.println(DynElement.TEXT);
    }
另外枚举也可以自定义变量的值,比如下面这个例子( http://blog.csdn.net/abing37/article/details/4391222)
public enum WeekDay {
        Mon("Monday"), 
        Tue("Tuesday"), 
        Wed("Wednesday"), 
        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.Wed);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;
                default:System.out.println("wrong number!");
            }
        }

        public String getDay() {
            return day;
        }
    }
测试方法为:
public static void main(String args[]) {
        for (WeekDay day : WeekDay.values()) {
            System.out.println(day + "====>" + day.getDay());
        }
        WeekDay.printDay(5);
    }

输出结果为:

Mon====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
Fri
其实枚举就是把这些常量编译成了static final类型的

比如上面的例子就是

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

这里请注意下Weekday这个方法是private,定义成public是会报错的。其实主要防止其他类再次定义枚举类

另外枚举的构造器只在构造枚举的时候被用到

枚举继承了ENUM类,有以一下几个方法:
A.ordinal()用来返回枚举值在枚举类中的顺序。

B.compareTo ()比较两个枚举值的顺序,返回顺序之差。

C.values(),静态方法,返回包含一个全部枚举值的数组。

D.toString(),返回枚举常量的名称

E.valueOf(),返回指定没弄成的枚举类型的枚举常量。        

关于枚举的一些特性可以参考这个

http://www.360doc.com/content/07/0926/16/15458_772184.shtml

另外下面我们在举一个枚举的使用例子:

Color color=Color.RED;  
switch(color){  
        case RED: System.out.println("it's red");break;  
        case BLUE: System.out.println("it's blue");break;  
        case BLACK: System.out.println("it's blue");break;  
}  
枚举可以用来做switch,switch是支持char和int的哦

更多内容可以参考:

http://helloyesyes.iteye.com/blog/1186575

http://blog.csdn.net/abing37/article/details/4391222

总结一下:枚举enmu是java 1.5之后的特性,可以用来替代一系列的常量值,它里面的内容本身就是static final的,另外枚举类型本身有自己的方法,要熟悉并利用。

你可能感兴趣的:(JAVA enum的用法)