如何使用Java Enum
简单的用法:JavaEnum简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:
性别:
public enum SexEnum { male, female; } 颜色:
public enum Color { RED, BLUE,GREEN,BLACK; }
枚举对象里面的值都必须是唯一的。
可以通过Enum类型名直接引用该常量,如SexEnum.male,Color.RED.
复杂用法:Java为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:
1. 代码一 WeekDay.java:
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;
    }
}
1. 代码二 WeekDayTest.java:
public class WeekDayTest {
  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
2.Java Enum原理 
Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum.
WeekDay经过反编译(javap WeekDay命令)之后得到的内容如下(去掉了汇编代码):
public final class WeekDay extends java.lang.Enum{
    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;
    static {};
    public static void printDay(int);
    public java.lang.String getDay();
    public static WeekDay[] values();
    public static WeekDay valueOf(java.lang.String);
}
所以实际上Enum类型就是以Java类来实现的,没有什么新的特点,只不过java编译器帮我们做了语法的解析和编译。完全也可以自己实现。但是既然有这样方便一个东西,当然会去用了。
使用实例: 
1》:以Class定义的
public class PCUEnum {
 public static void main(String[] args) {
  System.out
    .println(PCUEnum.TaskStatus.get(PCUEnum.TaskStatus.DELETED));
 }
 public enum TaskStatus {
  // 1:等待执行 2:正在执行 3:执行完毕 4:执行失败 5:暂停 100:已经删除 101:已经送审
  NOTINQUEUE,WAITING, EXECUTING, EXECUTED, FAILED, SUSPEND, DELETED,WAITING_AUDIT;
  public static int get(TaskStatus s) {
   int result = 0;
   switch (s) {
   case NOTINQUEUE:
    result=0;
    break;
   case WAITING:
    result = 1;
    break;
   case EXECUTING:
    result = 2;
    break;
   case EXECUTED:
    result = 3;
    break;
   case FAILED:
    result = 4;
    break;
   case SUSPEND:
    result = 5;
    break;
   case DELETED:
    result = 100;
    break;
   case WAITING_AUDIT:
    result = 101;
    break;
   }
   return result;
  }
 }
}
1.1》:以类为实例:
public class EnumClass {  
    enum explore {
        HERE, THERE
    }
    enum WeekDay {
        Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri("Friday"), Sat("Saturday"),
        Sun("Sunday"), Wro("Wrong day");
        private String day;
        WeekDay(String day){
            this.day = day;
        }
        public String getDay() {
            return day;
        }
    }
    public static void main(String[] args) {
        System.out.println(EnumClass.explore.HERE);
        System.out.println("--------");
        for(EnumClass.WeekDay day : EnumClass.WeekDay.values()) {
            System.out.println(day.getDay());
        }
    }
}
2》:以Enum定义的
package com.zhou.test;
public enum TaskEnumStatus {
    NOTINQUEUE(1),WAITING(2), EXECUTING(3), EXECUTED(4), FAILED(5), SUSPEND(6), DELETED(7),WAITING_AUDIT(8);
    private int i;
    private TaskEnumStatus(int i) {
        this.i = i;
    }
    public int getEnumStatus() {
        return i;
    }
}
public static void main(String[] args) {
        System.out.println(TaskEnumStatus.NOTINQUEUE + "=" + TaskEnumStatus.NOTINQUEUE.getEnumStatus());
    }
2.1》:以Enum定义
public enum UserStatusEnum {
    DISABLE("disable"),
    ENABLE("enable");
    private String value;
    UserStatusEnum(String value){
        this.value = value;
    }
    public String getValue() {
        return value;
    }
    public String toString() {
        return value;
    }
    public static void main(String[] args) {
        System.out.println(UserStatusEnum.DISABLE);
    }
}
2.2》:以Enum定义
public enum NumberEnum {
    CONST_FOUR(4), CONST_ENIGHT(8), CONST_NINE(999999);
    private final int value;
    NumberEnum(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public static void main(String[] args) {
        System.out.println(NumberEnum.CONST_ENIGHT.getValue());
    }
}
如何使用Java Enum的更多相关文章
- java enum
		
小谈Java Enum的多态性 博客分类: Java JavaAppleJDKJVMIDEA Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态 ...
 - Java Enum用法详解
		
Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...
 - (转)java enum枚举
		
转载自: 原理:http://singleant.iteye.com/blog/686349 应用:http://www.cnblogs.com/happyPawpaw/archive/2013/04 ...
 - java enum naming rules & Pascal case, Camel case, Uppercase
		
java enum naming rules Constant & all Capital Case https://stackoverflow.com/questions/3069743/c ...
 - Java Enum的多态性
		
转载自:http://pf-miles.iteye.com/blog/187155 Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态?不过还是先 ...
 - The Java Enum: A Singleton Pattern [reproduced]
		
The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...
 - 【转】Java enum的用法详解
		
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
 - Java enum的用法详解[转]
		
Ref:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html 用法一:常量 在JDK1.5 之前,我们定义常量都是: p ...
 - Java enum的用法详解
		
(转自:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html) 用法一:常量 在JDK1.5 之前,我们定义常量都是: ...
 
随机推荐
- 01: Centos7 常用命令
			
1.1 centos7中防火墙相关命令 1.查看状态 1. getenforce # 查看内核防火墙状态(disabled标识关闭) 2. systemctl status f ...
 - 20145101《Java程序设计》第10周学习总结
			
20145101<Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输. 计算机网络 路由器和交换机组成了核心的 ...
 - 20145339顿珠  MS08_067漏洞测试
			
20145339顿珠 Exp5 MS08_067漏洞测试 实验过程 IP地址:192.168.1.104 虚拟机ip:192.168.1.102 在控制台内使用search ms08_067查看相关信 ...
 - xshell的Solarized Dark配色方案
			
之前在ubuntu, kali, mint, air下都使用这一款配色方案,后来在网上看到有人在xshell中使用,配色方案有分享,就是一起无法导入 原来这个东西在你现有的连接无法直接导入,需要重新打 ...
 - 51nod 1083 矩阵取数问题
			
就很简单很简单的dp 只能从右或者从下走 所以 dp方程直接看下面公式吧 反正也不难 #include<bits/stdc++.h> using namespace std; ; in ...
 - [BZOJ4391][Usaco2015 dec]High Card Low Card dp+set+贪心
			
Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of ...
 - 对某项目中Vuex用法的分析
			
上周五刚发布一个线上版本,趁着新的需求和bug还没到来,决定分析一下正在维护的一个使用Vue 2.0 开发的后台管理系统中Vuex部分代码.这部分代码不是我写的,加上我一直在“使用”现成的而不是“搭建 ...
 - ajax用beforeSend自定义请求过程中客户端事件,提高用户体验
			
本文为博主原创,未经允许不得转载: 在应用ajax的过程中,当我们再前台提交请求的时候,如果服务端响应事件比较长,就会导致需要等很长时间在前台才能接受到服务端返回的 响应结果,往往会导致用户重复点击按 ...
 - NS3 一个小问题
			
可能会在执行./waf 命令的时候遇到这个问题,比如我想编译 /home/wasdns/Documents/NS3/ns-3.17/scratch 目录下的一个文件:newnsthree.cpp 编译 ...
 - 安装labelImage的问题qt
			
不知为何需要些source ~/.bash_profile才 自己在 ~/.bash_profile 中配置环境变量, 可是每次重启终端后配置的不生效.需要重新执行 : $source ~/.bash ...