一. 前言

为什么使用枚举类型?

在此之前,我们需要创建一个整形常量集,但是这些整型常量集并不会必然地将其自身的取值限制在这个常量集的范围之内,因此他们更有风险,且更难以使用。但是,枚举类型消除了这一缺陷,显得更加使用,下面实例说明。

使用public final static的方法定义如下常量集:

public class WeekDay{public static final int SUN = 1;public static final int MON = 2;public static final int TUE = 3;
}

通过下面的方法,传入不同类型的参数:

private static String getToday(int weekDay){switch (weekDay){case ConstantTest.MON:System.out.println("MON");break;case ConstantTest.SUN:System.out.println("SUN");break;case ConstantTest.TUE:System.out.println("TUE");break;}return null;
}//调用上面的方法
getToday(ConstantTest.MON);//正常的场景
getToday(5);//错误的场景,产生类型不安全的问题,因为取值没有在常量集范围之内

通过上面的方法,getToday(5)传入的参数,虽然编译时通过,但是在运行时出现什么情况,我们就不得而知了,但是这显然是不符合java程序的类型安全。

二. 枚举定义

枚举类型是指由一组固定的常量组成合法的类型,定义方法如下:

public enum WeekDay{SUN, MON, TUE, WED, THT, FRI, SAT
}

在创建enum时,编译器会自动添加一些有用的特性,他会创建toString()方法,以便你可以方便的显示某个enum实例的名字,编译器还会创建ordinal()方法,用来表示某个特定enum常量的声明顺序,以及static values()方法,用来按照enum常量的声明顺序,产生由这些常量值构成的数组:

for (WeekDay wd :WeekDay.values()) {System.out.println(wd + ",ordinal" + wd.ordinal());
}output:
SUN,ordinal:0
MON,ordinal:1
TUE,ordinal:2
WED,ordinal:3
THT,ordinal:4
FRI,ordinal:5
SAT,ordinal:6

改写上面的例子:

//定义枚举
public enum WeekDay {SUN, MON, TUE, WED, THT, FRI, SAT
}private static String getToday(WeekDay weekDay){switch (weekDay){case MON:System.out.println("MON");break;case SUN:System.out.println("SUN");break;case TUE:System.out.println("TUE");break;}return null;
}public static void main(String[] args){getToday(WeekDay.MON);//正常的场景//getToday(5);//编译时出错,超出了enum的类型范围。
}

三. 枚举的用法

  1. 常量定义
public enum WeekDay {SUN, MON, TUE, WED, THT, FRI, SAT
}
  1. switch
public enum WeekDay {SUN, MON, TUE, WED, THT, FRI, SAT
}public class SelectDay{WeekDay weekday = WeekDay.SUN;public void select(){switch(weekday){case SUN:weekday = WeekDay.SUN;bread;...}}
}
  1. 向枚举中添加新方法
public enum Color {  RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  // 成员变量  private String name;  private int index;  // 构造方法  private Color(String name, int index) {  this.name = name;  this.index = index;  }  // 普通方法  public static String getName(int index) {  for (Color c : Color.values()) {  if (c.getIndex() == index) {  return c.name;  }  }  return null;  }  // get set 方法  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  public int getIndex() {  return index;  }  public void setIndex(int index) {  this.index = index;  }
}
  1. 覆盖枚举的方法
public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //覆盖方法 @Override public String toString() { return this.index+"_"+this.name; }
}
  1. 实现接口
public interface Behaviour { void print(); String getInfo();
}
public enum Color implements Behaviour{ RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //接口方法 @Override public String getInfo() { return this.name; } //接口方法 @Override public void print() { System.out.println(this.index+":"+this.name); }
}
  1. 使用接口组织枚举
public interface Food { enum Coffee implements Food{ BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO } enum Dessert implements Food{ FRUIT, CAKE, GELATO }
}

实例参考至:http://www.imooc.com/article/3924

java之枚举类型应用相关推荐

  1. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  2. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题(转)

    写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能 ...

  3. 深度分析 Java 的枚举类型:枚举的线程安全性及序列化问题

    本文作者: 伯乐在线 - HollisChuang .未经作者许可,禁止转载! 欢迎加入伯乐在线 专栏作者. 写在前面: Java SE5 提供了一种新的类型 Java的枚举类型,关键字 enum 可 ...

  4. java(18) - 枚举类型和静态导入

    一.枚举: 我们定义的枚举类都是继承于java.lang.Enum类,枚举中的每个成员默认都是 public static final. 枚举类型的使用是通过 枚举类名.值 的方式来调用. 对于枚举类 ...

  5. java的枚举类型是什么_什么是枚举(java枚举类型enum用法)

    最佳回答 枚举 1.枚举 (enumeration) 值类型的一种特殊形式,它从 System.Enum 继承,并为基础基元类型的值提供备用名称.枚举类型有名称.基础类型和一组字段.基础类型. &qu ...

  6. java之 ------ 枚举类型

    枚举 一.枚举类型详细说明 简单的说,Enum一般用来表示一组相同类型的常量.如性别.日期.月份.颜色等.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且在比较的时候可以用"==&q ...

  7. java之枚举类型enum

    一.什么是枚举类 1.在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例数目有限且固定的类,在 Java 中可以定义为枚举类. 2.枚举类是一种特殊的类,它和普通的类一 ...

  8. 【Java】枚举类型

    一. 枚举是什么 隐约记得自己大一的时候在 C 语言的课程中学习过枚举 , 但是已经忘光光了 . 那么本文就在 Java 中再学一遍吧 . 枚举是一组常量集合,这些常量具有特定的标识符 . 在 Jav ...

  9. Java核心技术----枚举类型与泛型

    一.枚举类型 1.使用枚举类型设置常量 其中,enum是定义枚举类型关键使用枚举类型定义常量的语法如下: public enum Constants{ Constants_A, Constants_B ...

最新文章

  1. linux cpu漏洞,【图片】为什么linux mint上cpu漏洞直到现在也没完全修复?_linux吧_百度贴吧...
  2. 第一章课后习题(Java)
  3. PPStream、PPlive等播放器花屏之解决办法
  4. springmvc+mybatis+spring+redis
  5. SQL Activity Monitor
  6. 博客订阅代码de制作
  7. Windows使用opencv训练模型过程记录(提供样本)
  8. powershell 遍历json_使用PowerShell处理JSON字符串
  9. 阿里云OCR证件识别商业化发布,减少人工审核误差节省成本
  10. 主分区、扩展分区和逻辑分区(转载)
  11. 上海著名网络公司招聘高级软件工程师
  12. 博客美化的源码(标签,小老鼠,时钟,二次元,雪花,QQ聊天等)
  13. 获取单个数据库的邮箱数量
  14. 离散数学第九章—学习笔记
  15. 手机php文件怎么改后辍,手机百度云盘修改文件后缀名的方法
  16. 微信开放平台创建移动应用-必过
  17. Hive分组统计前top N条记录
  18. Linux内核regulator架构和编写
  19. 计算机作文 六年级,我和电脑600字_六年级作文_小学作文 - 265学校教育网
  20. 首届“中新人工智能高峰论坛”即将召开,周志华、李德毅......与你一起对话未来!...

热门文章

  1. Python数据分析 ---- ARMA模型
  2. 数学通道的应用(十五)-电阻的测量
  3. 碳减排量和碳配额的区别是什么?
  4. python引用自己写的文件
  5. 【转载】研究生退学记——谨以此记录我半途而废的研究生生涯
  6. 第一个工作单位的那些事
  7. PyTorch 简介
  8. 统计手机号耗费的总上行流量、下行流量、总流量(序列化)
  9. 如何写项目方案经验总结
  10. 链式二叉树的代码实现