(转)java enum枚举
转载自:
原理:http://singleant.iteye.com/blog/686349
应用:http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html
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 :
- /**
- * @author singleAnt
- * 2009.7.29
- * 定义一个枚举类型,代表星期一到星期日的7个缩写常量
- * 同时还定义了枚举类型的属性day,该属性可以是final,也可是变量
- * 同时还定义了该枚举类型的一个方法printDay
- */
- 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:
- /**
- * @author singleAnt
- * 2009.7.29
- * 测试枚举类型WeekDay.
- */
- 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
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 编译器帮我们做了语法的解析和编译。完全也可以自己实现。但是既然有这样方便一个东西,当然会去用了。
(转)java enum枚举的更多相关文章
- 161208、Java enum 枚举还可以这么用
在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外.然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看. 先来看一段代码示例: ...
- Java enum枚举类型
java的枚举类型详解: 简单示例: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 复杂示例(带自定义构造方法与类型) public enum En ...
- Java Enum枚举的用法(转)
说明:Java的枚举比dotnet的枚举好用,至少支持的方式有很多. 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以 ...
- Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
示例代码如下: package com.miracle.luna.lambda; import java.util.Arrays; /** * @Author Miracle Luna * @Date ...
- 简单认识java enum枚举
什么是枚举 枚举是java5中新增的特性,他是一个特殊的数据类型,他的特殊性在于他既是一种类类型,又比类类型多了安全性,简洁性,便捷性.java枚举类型是功能十分强大齐全的类,功能比其他语言中的对等物 ...
- java enum(枚举)的使用
在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的. 例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集” ...
- java enum(枚举)使用详解 + 总结
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...
- Java enum(枚举)的用法详解(转)
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- Java ENUM枚举的用法
DK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 用法一:常量 在JDK1.5 之前,我们定义常量都是: publicstaticfianl... ...
随机推荐
- Linux命令计算文件中某一列的平均值
例如每秒执行一次top命令,把结果输出到某个文件中保存,现在需要统计这段时间内某个进程的平均CPU占用率,可使用以下命令 | grep "GameServer_r" | awk ' ...
- ffplay的快捷键以及选项 FFmpeg 基本用法 FFmpeg常用基本命令 ffmpeg常用转换命令,支持WAV转AMR
ffmpeg -i 32_mkv_h264_718x480_ac3.mkv -codec copy -bsf:v h264_mp4toannexb -f mpegts xx.ts ./ffmpeg ...
- JBoss 系列十九:使用JGroups构建块RspFilter对群组通信返回消息进行过滤
内容概述 本部分说明JGroups构建块接口RspFilter,具体提供一个简单示例来说明如何使用JGroups构建块RspFilter对群组通信返回消息进行过滤. 示例描述 我们知道构建块基于通道之 ...
- vue打包后出现一些map文件的解决方法
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1.运行 cnpm run build 开始 ...
- 使用 dbdeploy.net 管理数据库变更
使用 dbdeploy.net 管理数据库变更 没有包含数据库的持续集成都是假的.这可不是我说的.一直以来都没能找到一个理想的数据库变更管理工具.直到转了 java 再回来,才发现 dbdeploy ...
- JavaScript Map 实现
//定义map function Map() { this.container = {}; } //将key-value放入map中 Map.prototype.put = function(key, ...
- HTTP协议发展历史
一.HTTP 0.9版本 1991年发布0.9版本,只有一个 GET 命令. 例如:GET /index.html 表示浏览器只能接收返回 html 格式的字符串:服务器发送完毕就关闭tcp链接. ...
- LAMP架构二
安装PHP7 1.查看php配置文件信息(phpinfo),php有两个配置文件开发环境和生产环境 [root@localhost php-5.6.30]# /usr/local/php/bin/ph ...
- NanoHttpd
NanoHttpd是个很强大的开源库,仅仅用一个Java类,就实现了一个轻量级的 Web Server,可以非常方便地集成到Android应用中去,让你的App支持 HTTP GET, POST, P ...
- ado连接sql server
//ado连接sql server //头文件加上以下这句. #import "C:\Windows\system\msado15.dll" no_namespace rename ...