简单的用法: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的更多相关文章

  1. java enum

    小谈Java Enum的多态性 博客分类: Java JavaAppleJDKJVMIDEA  Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态 ...

  2. Java Enum用法详解

    Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...

  3. (转)java enum枚举

    转载自: 原理:http://singleant.iteye.com/blog/686349 应用:http://www.cnblogs.com/happyPawpaw/archive/2013/04 ...

  4. java enum naming rules & Pascal case, Camel case, Uppercase

    java enum naming rules Constant & all Capital Case https://stackoverflow.com/questions/3069743/c ...

  5. Java Enum的多态性

    转载自:http://pf-miles.iteye.com/blog/187155 Enum+多态,我没说错,不过Enum是不可以被继承的,也不可以继承自别人,只是能实现接口而已,何谈多态?不过还是先 ...

  6. The Java Enum: A Singleton Pattern [reproduced]

    The singleton pattern restricts the instantiation of a class to one object. In Java, to enforce this ...

  7. 【转】Java enum的用法详解

    用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...

  8. Java enum的用法详解[转]

    Ref:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html 用法一:常量 在JDK1.5 之前,我们定义常量都是: p ...

  9. Java enum的用法详解

    (转自:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html) 用法一:常量 在JDK1.5 之前,我们定义常量都是: ...

随机推荐

  1. C++算法原理与实践(面试中的算法和准备过程)

    第0部分 简介 1. 举个例子:面试的时候,可能会出一道算法考试题,比如写一个 strstr 函数——字符串匹配. 可能会想到用KMP算法来解题,但是该算法很复杂,不适宜在面试中使用. 1.1 C++ ...

  2. Poisson Blending(Seamless clone)研究和实现

    Poisson Blending 实现了非常棒的效果,可以看 <自己动手,实现“你的名字”滤镜> http://www.cnblogs.com/jsxyhelu/p/7216795.htm ...

  3. 2017.7.4 ACM校内赛 Round 2

    这是一个向导 A - hdu 3652 B - bzoj 4152 C - bzoj 2429 D - bzoj 1087 E - bzoj 1566 F - bzoj 4043 G - bzoj 1 ...

  4. Win32 消息响应顺序

    如果窗口处理函数响应了 WM_RBUTTONUP后,不会响应WM_CONTEXTMENU消息了.

  5. linux下如何查看当前机器提供了哪些服务

    答:使用netstat工具 在命令行下输入netstat -atun即可列出当前机器提供的服务 netstat各选项解析: -a 列出所有服务 -t 列出tcp相关 -u 列出udp相关 -n 以数字 ...

  6. linux下安装evernote国际版

    一.背景 由于之前一直将笔记记录在evernote,因此现在转到linux下需要使用工具来记录笔记到evernote上 OS : Ubuntu 16.04 (xenial) 二.linux版everp ...

  7. vim的加密和解密?

    vim中出现的错误提示含义: 参考: http://blog.csdn.net/u014599371/article/details/43955169 E488: trailing character ...

  8. 【第一章】 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

  9. 51nod 1021 石子归并

    区间dp 递推比递归的常数要小  所以还是尽量学会递推吧 看题解  各种恶心啊  有木有 还是视频讲的直接呃   不过就是讲的有点儿慢 链接:https://www.bilibili.com/vide ...

  10. 【Coursera】Security Introduction -Eighth Week(1)

    Security Introduction People With Bad Intent 今天,Bob 向 Alice 发送了一条 "Hello,Allice!" 的信息,他们希望 ...