1. 关于Java Enum: 学过C/C++等语言的人,应该都对Enum类型略知一二。Enum一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals。是一种好的习惯。JDK1.5之前没有Enum这个类型,那时候一般用接口常量来替代。有了JavaEnum之后,可以更贴近的表示这种常量。

2. 如何使用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; } }2. 代码二 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====>MondayTue====>TuesdayWed====>WednesdayThu====>ThursdayFri====>FridaySat====>SaturdaySun====>SundayFri

  

3. Java Enum原理

Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>.

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());} }

原文地址:http://blog.sina.com.cn/s/blog_52fea7b60100phjl.html

如需转载请注明出处

  

转载于:https://www.cnblogs.com/gxbk629/p/3649450.html

Java中的Enum(枚举)用法介绍相关推荐

  1. Java中的enum枚举类

    首先说说为什么要写这个enum枚举类吧,是群里有个新手问:怎样把enum类中的值遍历得到,其实自己用的也很少.自己也是确实不知道,于是我去网上搜了不少,总结了些,希望对大家有帮助:首先我说说怎样遍历枚 ...

  2. Java中的enum详细解析------Java enum 枚举还可以这么用

    在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 1.可以在enum中添 ...

  3. php定义枚举,PHP中Enum(枚举)用法实例详解

    本文实例讲述了PHP中Enum(枚举)用法.分享给大家供大家参考,具体如下: PHP其实有Enum类库的,需要安装perl扩展,所以不是php的标准扩展,因此代码的实现需要运行的php环境支持. (1 ...

  4. Java中Date各种相关用法

    Java中Date各种相关用法 本文主要介绍Java中Date各种相关用法. AD:   Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=C ...

  5. JAVA中 BufferedImage、ImageIO用法

    转载:JAVA中BufferedImage.ImageIO用法 - 邓维-java - 博客园 (cnblogs.com) BufferedImage          BufferedImage是其 ...

  6. java中iterator用法_java_详解Java中Iterator迭代器的用法,迭代器(Iterator)迭代 - phpStudy...

    详解Java中Iterator迭代器的用法 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为&quo ...

  7. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

  8. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等

    Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容如下: 公平锁 / 非公平锁 可重入锁 / 不可重入锁 独享锁 / 共享锁 互 ...

  9. java中arraycopy的用法_[jdk源码阅读系列]Java中System.arraycopy()的用法

    本文转载,原文链接: 3分钟了解Java中System.arraycopy的用法 - 伊万夫斯基 - 博客园  https://www.cnblogs.com/benjieqiang/p/114288 ...

最新文章

  1. 使用 github 和 jitpack 构建 android 依赖
  2. MATLAB无穷大上的反常积分
  3. 系统无法在消息文件中为application_iOS 14 Filza 文件消息,M1 能用 win 系统
  4. Spring Security笔记:HTTP Basic 认证
  5. 建行计算机招聘考试考什么,银行招聘考试考什么
  6. 开滦二中2021高考成绩查询,2021唐山中考录取分数线查询
  7. MYSQL主从不同步延迟原理分析及解决方案
  8. 全网最强最细postman接口测试教程(一)
  9. 联想计算机睡眠如何唤醒,笔记本电脑休眠和睡眠如何唤醒
  10. 华为v5服务器安装2012系统,裸金属服务器安装v5
  11. 第三章 项目立项管理
  12. 电动车治理再度升级,多地将有“新变化”
  13. A. Liserious战队
  14. Linux下视频转换工具:转换,切割,连接,
  15. 3.3.Polynomial_add 一元多项式相加
  16. GRE over IPSec技术原理
  17. C语言电池电压检测程序,电池温度检测原理和示例代码
  18. [计网:原理与实践] 第五章:端到端协议(课后习题整理)
  19. 不同业务场景Cas客户端(Java业务系统)接入
  20. FPGA的调试-调试设计的指导原则

热门文章

  1. eclipse中将一个项目作为library导入另一个项目中
  2. Windows Intellij环境下Gradle的 “Could not determine Java version from ‘9.0.1’”的解决方式...
  3. java成员变量的初始化
  4. Qt移动应用开发(八):实现跨平台的QML和OpenGL混合渲染
  5. django中怎样生成非HTML格式的内容。
  6. MySQL的四种不同查询的分析
  7. VS2010下Boost1.55.0配置
  8. 百度pcs 如何获取Access Token
  9. 用字符串表达式访问JSON数据(java,fastjson)
  10. 序1--年轻正当时(特权)