Java中的Enum(枚举)用法介绍

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop会遇到的45个问题,你确定你了解吗?

本文这里为大家分享Hadoop集群设置中经常出现的一些问题。 在工作生活中&#xff0c;有些问题非常简单&#xff0c;但往往搜索半天也找不到所需的答案&#xff0c;在Hadoop的学习与使用过程中同样如此。关注WX公众号&#xff1a;大数据技术工程师。可免费领取hadoop学习资料。这…

不同国家的视力表也不一样!| 今日趣图

全世界只有3.14 %的人关注了青少年数学之旅微信聊天的时候女生说洗澡去了你要怎么回答&#xff1f;&#xff08;图源二营长笑了&#xff0c;侵权删&#xff09;不同国家的视力表也不一样&#xff01;中国的视力表是这样的日本的视力表是这样的美国的视力表是这样的&#xff08;…

自定义EventSource(三)IncrementingEventCounter

在自定义EventSource时&#xff0c;可以使用四种EventCounter&#xff1a;EventCounter&#xff1a;统计指标收集器&#xff0c;比如平均值&#xff0c;最大值&#xff0c;最小值PollingCounter&#xff1a;自定义统计指标收集器&#xff0c;通过自定义统计方法的方式实现对指标…

TAR命令参数详解[转]

http://sujian.blog.51cto.com/8838/3456TAR命令名tar - tar 档案文件管理程序的 GNU 版本。下面将逐个介绍其含义 总览tar [ - ] A --catenate --concatenate | c --create | d --diff --compare | r --append | t --list | u --update | x -extract --get [ --atime-preserve…

SQL日期获取

当前日期 select CONVERT(varchar(10), getdate(), 120) 一个月第一天的SQL 脚本&#xff1a; SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,…

Sphinx全文检索引擎测试

数据表 1、documents CREATE TABLE documents ( id int(13) NOT NULL auto_increment, group_id int(11) NOT NULL, group_id2 int(11) NOT NULL, date_added datetime NOT NULL, title varchar(255) NOT NULL, content text NOT NULL, PRIMARY KEY (id), KEY title (title),…

为什么应该用record来定义DTO

DTODTO是数据传输对象&#xff08;Data Transfer Object&#xff09;的简称&#xff0c;主要用作在进程之间传送数据。DTO的特点是它不包含任何业务逻辑或行为。下面是一个典型的DTO定义&#xff1a;public class UserDto {public int Id { get; set; }public string Name { ge…

笑翻了!想象的论文答辩和真实的论文答辩

全世界只有3.14 %的人关注了青少年数学之旅大学答辩实录&#xff0c;要不要这么真实&#xff01;【1】【2】【3】【4】【5】【6】【7】【8】【9】综合来源&#xff1a;冷兔、中外学术情报部分素材源于网络&#xff0c;版权归原作者所有如有侵权请留言联系删除&#xff0c;感谢合…

c++与java,有什么区别?

什么是C 语言&#xff1f; C 是一种计算机编程语言&#xff0c;包含C编程语言的特性以及Simula67&#xff08;第一个面向对象语言&#xff09;。C 引入了Class和Objects的概念。 它封装了高级和低级语言功能。因此&#xff0c;它被视为一种中级语言。之前它被称为“C with cl…

获取页面可见区域,屏幕区域的尺寸

在设计网页时,常常需要考虑页面可见区域的宽度及高度,以便调整页面元素的相对位置. 例如创建2个div,使得高度上各占页面高度的50%,如何实现? 下面是一个页面区域的测试样例,参考即可实现:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

数学特级老师:数学除了做习题,这份140G的资料一定要收藏!

▲ 点击查看很多时候&#xff0c;我们把数学简单的归为算数&#xff0c;归为计算能力&#xff0c;但数学更多的是一种培养逻辑思维能力的方式。包括一元二次方程、或者向量&#xff0c;或者几何证明。而在我们传统的数学课上&#xff0c;更多的是通过做题来理解数学知识&…

工信部的闹剧

用纳税人的钱花4700多万采购一个绿&#xff03;坝软件&#xff0c;开始说必须安装&#xff0c;后来又改了&#xff0c;说可以自行卸载&#xff0c;装不装自己决定。天上掉馅饼了啊&#xff01; 有这么好的事情啊&#xff0c;花一大笔钱搞一个大家爱装不装的东西免费提供给大家用…

浅谈Redis五种数据结构的底层原理

概念 Redis作为一个开源的用C编写的非关系型数据库&#xff0c;基于优秀的CRUD效率&#xff0c;常用于软件系统的缓存&#xff0c;其本身提供了以下五种数据格式&#xff1a; string&#xff1a;字符串list&#xff1a;列表hash&#xff1a;散列表set&#xff1a;无序集合zse…

什么是事件冒泡?如何用jquery/js阻止事件冒泡?阻止冒泡有什么作用?小生来抛个砖。...

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a;有时候&#xff0c;当我们给一个外层 div 添加了一个‘click’事件&#xff0c;然而在内层的其他元素我们也为它添加了 ‘click’事件&#xff0c;那么当我们点击内层的元素时&#xff0c;外层的事件会响…

在家做什么能让隔壁报警?| 今日最佳

全世界只有3.14 %的人关注了青少年数学之旅&#xff08;图源神店通缉令&#xff0c;侵权删&#xff09;

暴库也不怕!EF Core加密存储数据

针对某些数据字段要保存敏感数据的情况&#xff0c;比如银行卡号&#xff0c;我们需要使用一种机制保证存储到数据库的数据是加密的&#xff0c;避免数据泄露风险&#xff0c;但是又能够正常读取出来显示。下面我们用MySql演示如何操作。Demo创建一个ConsoleApp1&#xff0c;然…

[网摘]CSS z-index 属性

定位一直是WEB标准应用中的难点&#xff0c;如果理不清楚定位那么可能应实现的效果实现不了&#xff0c;实现了的效果可能会走样。如果理清了定位的原理&#xff0c;那定位会让网页实现的更加完美。 定位的定义&#xff1a; 在CSS中关于定位的内容是&#xff1a;position:relat…

JVM知识点总览:高级Java工程师面试必备

下面这篇文章汇集了阿里、美团、Oracle 等大厂的 JVM 考点&#xff0c;你是否能回答得上来&#xff1f; 什么是 Java 虚拟机&#xff1f;为什么 Java 被称作是“平台无关的编程语言”&#xff1f; Java 代码是怎么运行的&#xff1f; Java 虚拟机是如何加载 Java 类的? JVM…

2007最受欢迎的十大Ajax技术文章

DeveloperWorks 中国网站 Ajax 技术资源中心在 2007 年上半年里发表了很多和 Ajax 相关的技术文章、教程、多媒体课堂和专栏。我们特地整理出 2007 上半年最受读者欢迎的内容&#xff0c;希望通过这个排行榜&#xff0c;您可以了解最新的 Ajax 技术热点&#xff0c;及与 Ajax 开…

设计原则:色彩

背景 最初接触《彩色UML》的时候就给了我很大的触动&#xff0c;可惜一致没有内化这种触动&#xff0c;直到最近一次看“老大”画了一个彩色的分析图&#xff0c;又突然的重现了这种触动&#xff0c;然后在一个梦里内化了这种冲动&#xff0c;第二天发现团队的“贴纸”和“水笔…